【问题标题】:Calculate data based on days and weeks in SQL在 SQL 中根据天数和周数计算数据
【发布时间】:2011-05-06 11:11:47
【问题描述】:

我有客户,他们以几天或几周为单位存储数据。但客户只能选择按天或按周存储数据。看下面的例子

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 周的时间来计算基于时间的客户 ID 时间段。

示例: 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

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

【问题讨论】:

    标签: sql-server sql-server-2005 tsql


    【解决方案1】:
    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;
    

    【讨论】:

    • 请发帖,表中有storeId。我需要基于 clientid 的 storeid 的小时数。
    • 我不确定您需要什么。您应该发布您的预期结果。
    猜你喜欢
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多