SQL Server语言 - 在 SQL 中根据天数和周数计算数据



我有客户,他们以天或周为单位存储数据。但是客户只能选择在几天或一周内存储数据。请参阅以下示例

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 周的基于小时数的客户 ID 周期汇总到 27 周和 27 周至今。

例:过去 52 周到 27 周的总小时数 ClientId =1 = 150从过去 27 周到现在的总小时数 ClientId =1 = 200

ClientId =2 从过去 52 周到 27 周的总小时数 = 350从过去 27 周到今天的 ClientId = 2,总小时数 = 250。

我在 T-SQL 中需要这个。这让我感到困惑。请有人给我写一个查询。

客户端

时间级别还有另一个表,如下所示。

Client   time_level
1       Day
2       Week

更新:我们需要根据@clientid找到商店的总小时数

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;

最新更新