SQL Как создать предложение where для фильтрации последних шести периодов с этим форматом ГГГГММ? - PullRequest
0 голосов
/ 05 января 2020

Я хочу выполнить запрос с критерием, который суммирует предыдущие 6 периодов с использованием следующего формата периода YYYYMM.

SELECT sum(t.usage)
FROM t
WHERE t.peroid ?????
GROUP BY t.period

Period   Usage
-------------
201907   30
201908   40
201909   50
201910   60
201911   70
201912   60
202001   20

Ответы [ 3 ]

0 голосов
/ 05 января 2020

Похоже, что вы могли бы достичь этого, используя OFFSET:

WITH CTE AS (
    SELECT Usage
    FROM dbo.t
    ORDER BY t.Period DESC
    OFFSET 0 ROWS FETCH NEXT 6 ROWS ONLY)
SELECT SUM(Usage)
FROM CTE;
0 голосов
/ 05 января 2020

Вы можете попробовать следующий запрос.

DECLARE @startDate DATETIME = getdate()

SELECT sum(TotUsage)
FROM (
    SELECT sum(t.usage) AS Totusage
    FROM UsageDetails t
    GROUP BY t.period
    HAVING t.period BETWEEN Convert(VARCHAR(6), DATEADD(month, - 6, @startDate), 112)
            AND Convert(VARCHAR(6), @startDate, 112)
        AND t.period > Convert(VARCHAR(6), DATEADD(month, - 6, @startDate), 112)
    ) a

Вот живой пример .

0 голосов
/ 05 января 2020

Попробуйте это:

select  t.period        as  "Period",
        sum(t.usage)    as  "Usage"
from    t
where   t.peroid >= cast(convert(char(6),dateadd(month, -6, cast(convert(char(6),getdate(),112)+'01' as date)),112) as int)
group by t.period
order by t.period
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...