Последние 10 недель в SQL Server - PullRequest
0 голосов
/ 09 мая 2019

Я использую процедуру, которая возвращает оборот магазинов по неделям: https://i.ibb.co/N3sP2Jp/1.png

enter image description here

Я хочу только последние 10 недель с текущей недели. И то же самое за предыдущий год.

SELECT
    DATENAME(WEEK, [GP_DATEPIECE]) AS [WEEK],
    [et_libelle] AS [STORE NAME],
     SUM(TOTALTTC) AS [TU],
     SUM(TOTALTTC) AS [TU -1],

GROUP BY
    [et_libelle],
    DATENAME(WEEK, [GP_DATEPIECE])

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

ЭТО ОТВЕТ НА ОРИГИНАЛЬНОЙ ВЕРСИИ ВОПРОСА.

Чтобы получить данные за последние 10 недель , вы можете сделать:

where datepiece >= dateadd(week, datediff(week, 0, getdate()) - 10, 0)
0 голосов
/ 09 мая 2019

Я обновил скрипт в соответствии с вашими требованиями, и я надеюсь, что теперь мы настолько близки к вашему требованию.Результат запроса ниже представляет собой необработанные строки для сравнения данных.Теперь вы можете применить агрегацию к вашему набору результатов, применив GROUP by к YR (для сравнения данных за все годы), и даже вы можете добавить номер WK в GROUP, чтобы вы могли сравнивать данные по годам и неделям.

Примечание: как я применил ISO_Week, неделя начинается в понедельник и заканчивается в воскресенье.

WITH CTE (COMMON,DayMinus)
AS
(
SELECT 1,0 UNION ALL
SELECT 1,1 UNION ALL
SELECT 1,2 UNION ALL
SELECT 1,3 UNION ALL
SELECT 1,4 UNION ALL
SELECT 1,5 UNION ALL
SELECT 1,6 UNION ALL
SELECT 1,7 UNION ALL
SELECT 1,8 UNION ALL
SELECT 1,9
)
SELECT YEAR(your_date_column) YR,
DATEPART(ISO_WEEK, your_date_column) WK,
* 
FROM your_table
WHERE YEAR(your_date_column) IN (2019,2018)
AND DATEPART(ISO_WEEK, your_date_column) IN
(
    SELECT A.WKNUM-CTE.DayMinus AS [WEEK NUMBER] 
    FROM CTE
    INNER JOIN (
        SELECT 1 AS COMMON,DATENAME(ISO_WEEK,GETDATE()) WKNUM
    ) A ON CTE.COMMON = A.COMMON
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...