【问题标题】:How to convert the following query to give sum per week如何将以下查询转换为每周总和
【发布时间】:2015-08-07 09:27:11
【问题描述】:

这是计算每天总时间的长查询的一部分。我想改变它给我每周的总时间。任何的想法?要查看长查询,请单击Here

INSERT INTO @test (
    activity
    ,DATE
    ,TimePerDay
    )
SELECT activity
    ,Cast(starttime AS DATE) AS DATE
    ,SUM(datediff(second, starttime, endtime)) / 60.0 AS TimePerDay
FROM cte WITH (NOLOCK)
WHERE starttime >= dateadd(week, @LastXWeeks, last_update)
GROUP BY activity
    ,cast(starttime AS DATE)

【问题讨论】:

    标签: sql sql-server sql-server-2008 sql-server-2005


    【解决方案1】:

    例如,您可以这样做:

    SELECT activity
        ,DATEADD(wk, DATEDIFF(wk,0,Cast(starttime AS DATE)), 0) AS Week
        ,SUM(datediff(second, starttime, endtime)) / 60.0 AS TimePerDay
    FROM cte WITH (NOLOCK)
    WHERE starttime >= dateadd(week, @LastXWeeks, last_update)
    GROUP BY activity
        ,DATEADD(wk, DATEDIFF(wk,0,Cast(starttime AS DATE)), 0)
    

    您可能需要根据一周的实际开始日期调整代码。这适用于周一至周日。

    【讨论】:

    • 另外,我希望您知道使用 NOLOCK 可能导致的所有问题。
    • 您能告诉我如何更改一周的开始日期吗?
    • 公式中的零是日期“零”,即 1.1.1900,恰好是星期一。要更改日期,您必须将其替换为另一天,例如对于星期日,您可以使用 DATEADD(wk, DATEDIFF(wk,'19950101',Cast(starttime AS DATE)), '19950101') 自 1.1.1995是星期天。
    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多