Question: I need a SELECT to return the previous 12 quarters.

I can join in the data i need once i figure out how to get started. I have a snippet i use in another piece to return the previous 12 hours for a report. i am thinking it would be something similar..

```
;Declare @Date datetime =getdate()

;WITH DatesPre AS
(
    SELECT DATEPART(HOUR,DATEADD(HOUR,-1,@Date)) [Hour], 
      DATEADD(HOUR,-1,@Date+1) [Date], 1 Num
    UNION ALL
    SELECT DATEPART(HOUR,DATEADD(HOUR,-1,[Date])), 
      DATEADD(HOUR,-1,[Date]), Num+1
    FROM DatesPre
    WHERE Num < 12
)
SELECT [Hour]
FROM DatesPre

```

Here is sort of what i want to get to

[![enter image description here](https://i.stack.imgur.com/QhBvJ.png)](https://i.stack.imgur.com/QhBvJ.png)

Answer: 
A recursive CTE is a viable approach:

```
WITH quarters AS (
      SELECT datefromparts(year(getdate()), 1 + month(getdate()) / 3, 1) as q, 1 as num
      UNION ALL
      SELECT dateadd(quarter, -1, q), num + 1
      FROM quarters
      WHERE num < 12
     )
SELECT q
FROM quarters;

```

[Here](https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=8ad9d39ec6ee4a8cfc249e1482c31917) is a db<>fiddle.
Thanks Gordon. for posterity sake - here was what i ended up with

```
WITH Q AS (
    SELECT datefromparts(year(getdate()), 1 + month(getdate()) / 3, 1) as [quarter], 1 as num
    UNION ALL
    SELECT dateadd(quarter, -1, [quarter]), num + 1
    FROM Q
    WHERE num < 12

),P as (
    Select '1/2' as pair
        UNION ALL 
    Select '3/4' as pair
        UNION ALL
    Select '7/8' as pair
        UNION ALL
    Select '10/11' as pair
        UNION ALL
    Select '13/14' as pair
)

SELECT [quarter],[pair]
FROM Q
  OUTER APPLY (
      SELECT * 
      FROM P
    ) pair

```