计算每周基数的小时数?

时间:2011-05-09 14:00:14

标签: sql sql-server tsql

我需要找到该特定客户的最长日期,该日期将被视为最新日期(或当前日期)。然后,从那里我需要回到52周到27周并计算总和(小时)。 26周至最新日期(或当前日期)并计算总和(小时)。

 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

请让我知道如何在SQL中计算这个以获得输出?如果您有疑问,请问我。

1 个答案:

答案 0 :(得分:2)

最简单的方法是为此使用两个查询;第一个获取边界日期,第二个计算总数。你可以把它全部放到一个查询中,但我认为它不会产生太大的影响。

DECLARE
    @BeginDate datetime,
    @MidDate datetime

SELECT
    @BeginDate = DATEADD(wk, -52, MAX(period)),
    @MidDate = DATEADD(wk, -25, MAX(period))
FROM TableName
WHERE ClientID = @ClientID

SELECT
    SUM(CASE
            WHEN period >= @BeginDate AND period < @MidDate THEN hours
            ELSE 0
        END) AS HoursInFirstHalf,
    SUM(CASE
            WHEN period >= @MidDate THEN hours
            ELSE 0
        END) AS HoursInLastHalf
FROM TableName
WHERE ClientID = @ClientID