Выбрать Предыдущие x Квартальные даты - PullRequest
2 голосов
/ 25 февраля 2020

Мне нужен SELECT, чтобы вернуть предыдущие 12 кварталов.

Я могу присоединиться к нужным мне данным, когда выясню, с чего начать. У меня есть фрагмент, который я использую в другой части, чтобы вернуть предыдущие 12 часов для отчета. Я думаю, что это было бы что-то похожее ..

;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

Вот то, что я хочу получить

enter image description here

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Рекурсивный CTE - это жизнеспособный подход:

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;

Здесь - это скрипта db <>.

0 голосов
/ 26 февраля 2020

Спасибо, Гордон. ради потомков - вот что я закончил

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...