【问题标题】:Average Counts by Hour by Day of Week按星期几按小时计算的平均计数
【发布时间】:2020-09-09 23:04:00
【问题描述】:

这个question 帮助我成功了:

SELECT 
    [Day], 
    [Hour], 
    [DayN], 
    AVG(Totals) AS [Avg]
FROM
(
    SELECT 
        w = DATEDIFF(WEEK, 0, ForDateTime),
        [Day]  = DATENAME(WEEKDAY, ForDateTime),
        [DayN] = DATEPART(WEEKDAY, ForDateTime),
        [Hour] = DATEPART(HOUR,    ForDateTime),
        Totals = COUNT(*)
    FROM 
        #Visit
    GROUP BY 
        DATEDIFF(WEEK, 0, ForDateTime),
        DATENAME(WEEKDAY, ForDateTime),
        DATEPART(WEEKDAY, ForDateTime),
        DATEPART(HOUR,    ForDateTime)
) AS q
GROUP BY 
    [Day], 
    [Hour], 
    [DayN]
ORDER BY 
    DayN; 

如何改变这一点,而不是按小时显示平均值,例如9, 10, 11, 12 等 09:30-10:30,10:30-11:30,11:30-12:30,12:30-13:30 一直显示23:30。

【问题讨论】:

    标签: sql sql-server tsql date group-by


    【解决方案1】:

    一种简单的方法是将ForDateTime 偏移 30 分钟。基本上你只需要在查询中用dateadd(minute, 30, ForDateTime) 替换每一个 出现的ForDateTime

    在结果集中,Hour9 为您提供从 8:30 到 9:30 的时间段,依此类推。

    【讨论】:

    • 感谢@GMB,您建议如何处理显示 09:30-10:30 而不是 9 的结果集?
    • @Philip:字符串连接可能吗? CONCAT([Hour], ':30-', [Hour] + 1, ':30').
    • 嗨@GMB,我只是在验证,如果我按照你的建议做,15 小时 = 14:30 到 15:30,这与你所说的不同。对吗?
    • @Philip:啊,是的,你是对的,我想反过来。只是相应地修正了我的答案。所以要显示时间段,你需要CONCAT([Hour] - 1, ':30-', [Hour], ':30')
    猜你喜欢
    • 2012-05-06
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多