Рассчитать данные на основе дней и недель в SQL - PullRequest
1 голос
/ 05 мая 2011

У меня есть клиенты, которые хранят данные в днях или неделях.Но у клиента есть только возможность хранить данные в днях или неделях.см. пример ниже

ClientID  StoreID    period      hours
1       10      2010-04-19  8.04
1       10      2010-04-20  6.24
1       10      2010-04-21  8.26
1       20      2010-04-22  7.94
1       20      2010-04-23  22.43
1       20      2010-04-24  22.99
2       5       2010-12-19  130.67
2       5       2010-12-26  159.26
2       5       2011-01-02  113.59
2       5       2011-01-09  12.66
2       8       2011-01-16  22.34
2       8       2011-01-23  11.35

Теперь я должен суммировать часы на основе идентификатора клиента периода за последние 52 недели до 27 недель и 27 недель до настоящего времени.

Пример: ClientId= 1 за последние 52 недели до 27 недель всего часов = 150 ClientId = 1 за последние 27 недель до сегодняшних часов общего числа = 200

ClientId = 2 за последние 52 недели до 27 недель общего количества часов = 350 ClientId = 2 отпоследние 27 недель до сегодняшнего дня общее количество часов = 250.

Мне это нужно в T-SQL.Это смущает меня.Пожалуйста, кто-нибудь напишите мне запрос.

Существует другая таблица для уровня времени Клиента, подобная этой.

Client   time_level
1       Day
2       Week

Обновление: нам нужно найти общее количество часов storeid на основе@ ClientID

1 Ответ

1 голос
/ 06 мая 2011
DECLARE @MondayThisWeek DATETIME
SELECT  @MondayThisWeek = DATEADD(wk,
                             DATEDIFF(wk, 0, GETDATE()),
                             0);

DECLARE @ClientId INT;
SELECT @ClientId = 1;



SELECT  cd.StoreId,
    SUM(cd.HOURS) AS Hours
FROM    ClientData cd
WHERE   cd.Date >= DATEADD(ww, -52, @MondayThisWeek)
    AND cd.Date < DATEADD(ww, -27, @MondayThisWeek)
    AND cd.ClientId = @ClientId 
GROUP BY cd.StoreId;

SELECT  cd.StoreId,
    SUM(cd.HOURS) AS Hours  
FROM    ClientData cd
WHERE   cd.Date >= DATEADD(ww, -27, @MondayThisWeek)
    AND cd.Date < @MondayThisWeek
    AND cd.ClientId = @ClientId
GROUP BY cd.StoreId;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...