首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >聚合时间序列表( HourOfDay,Val)到HourOfDay的平均值(fi )。星期一上午10:00-11:00,11:00-12:00,.,Tue.)

聚合时间序列表( HourOfDay,Val)到HourOfDay的平均值(fi )。星期一上午10:00-11:00,11:00-12:00,.,Tue.)
EN

Stack Overflow用户
提问于 2022-03-13 18:55:55
回答 1查看 135关注 0票数 1

到目前为止,我进行了一个SQL查询,该查询为我提供了一个表,其中包含一天中每小时处理的客户数量--给定任意的开始和结束日期时间值(来自Grafana接口)。结果可能会超过几个星期。我的目标是在工作日前用平均值实现一个小时热图。

如何将这些客户每小时进行汇总,以显示每个工作日该小时的平均值?

假设我在19天内每天得到24个数值。我如何把每一个星期一,星期二,星期三,清华,星期五,星期六,太阳-每小时的24个数值,代表那些日子的平均值?

此外,也只使用整周的数据,因此去掉前导和尾随日,而这些数据并不是充分表示的一周的一部分(因此,相同数量的单个工作日代表平均值)。

下面是一个片段,介绍到目前为止SQL查询的返回情况。(每天小时,顾客人数):

代码语言:javascript
复制
...    
    2021-12-13 11:00:00 |   0
    2021-12-13 12:00:00 |   3
    2021-12-13 13:00:00 |   4
    2021-12-13 14:00:00 |   4
    2021-12-13 15:00:00 |   7
    2021-12-13 16:00:00 |   17
    2021-12-13 17:00:00 |   12
    2021-12-13 18:00:00 |   18
    2021-12-13 19:00:00 |   15
    2021-12-13 20:00:00 |   8
    2021-12-13 21:00:00 |   10
    2021-12-13 22:00:00 |   1
    2021-12-13 23:00:00 |   0
    2021-12-14 00:00:00 |   0
    2021-12-14 01:00:00 |   0
    2021-12-14 02:00:00 |   0
    2021-12-14 03:00:00 |   0
    2021-12-14 04:00:00 |   0
    2021-12-14 05:00:00 |   0
    2021-12-14 06:00:00 |   0
    2021-12-14 07:00:00 |   0
    2021-12-14 08:00:00 |   0
    2021-12-14 09:00:00 |   0
    2021-12-14 10:00:00 |   12
    2021-12-14 11:00:00 |   12
    2021-12-14 12:00:00 |   19
    2021-12-14 13:00:00 |   11
    2021-12-14 14:00:00 |   11
    2021-12-14 15:00:00 |   12
    2021-12-14 16:00:00 |   9
    2021-12-14 17:00:00 |   2
...

所以(示意性地,示例数据) startDate 2021-12-10 11:00到endDate 2021-12-31 17:00

代码语言:javascript
复制
-------------------------------
...
Mon 2021-12-13 12:00  | 3
Mon 2021-12-13 13:00  | 4
Mon 2021-12-13 14:00  | 4
...
Mon 2021-12-20 12:00  | 1
Mon 2021-12-20 13:00  | 6
Mon 2021-12-20 13:00  | 2
...
Mon 2021-12-27 12:00  | 2
Mon 2021-12-27 13:00  | 2
Mon 2021-12-27 13:00  | 3
...
-------------------------------

进入这一阶段:脱衣舞先导周五10.,周六11.,孙中山12.脱衣舞尾随tue 28.,文29.清华30.星期五31.平日平均时数

代码语言:javascript
复制
-------------------------------
...
Mon 12:00  | 2
Mon 13:00  | 4
Mon 14:00  | 3
...
Tue 12:00  | x
Tue 13:00  | y
Tue 13:00  | z
...
-------------------------------

到目前为止,我的方法:

代码语言:javascript
复制
    WITH CustomersPerHour as (
      SELECT dateadd(hour, datediff(hour, 0, Systemdatum),0) as DayHour, Count(*) as C 
      FROM CustomerList
      WHERE CustomerID > 0
        AND Datum BETWEEN '2021-12-010T11:00:00Z' AND '2021-12-31T17:00:00Z'
        AND EntryID IN (62,65)
        AND CustomerID IN (SELECT * FROM udf_getActiveUsers())
        GROUP BY dateadd(hour, datediff(hour, 0, Systemdatum), 0)
    )
    
    -- add null values on missing data/insert missing hours
    SELECT DATEDIFF(second, '1970-01-01', dt.Date) AS time, C as Customers
    FROM dbo.udf_generateHoursTable('2021-12-03T18:14:56Z', '2022-03-13T18:14:56Z') as dt
        LEFT JOIN CustomersPerHour cPh ON dt.Date = cPh.DayHour
    ORDER BY
      time ASC
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-13 20:32:54

嗨,最简单的解决方案就是做你在示例中写的东西。创建用于聚合的自定义基础。

因此,第一步是在聚合表中准备数据,包括日期和时间的精确性和客户计数。

那就建立基地。这是基本思想的例子:

代码语言:javascript
复制
-- EXAMPLE
SELECT 
DATENAME(WEEKDAY, GETDATE()) + ' ' + CAST(DATEPART(HOUR, GETDATE()) + ':00' AS varchar(8)) 

-- OUTPUT: Sunday 21:00

您可以连接数据,然后在GROUP BY子句中使用它。为用例调整此查询:

代码语言:javascript
复制
SELECT 
DATENAME(WEEKDAY, <DATETIME_COL>) + ' ' + CAST(DATEPART(HOUR, <DATETIME_COL>) AS varchar(8)) + ':00' as base
,SUM(...) as sum_of_whatever
,AVG(...) as avg_of_whatever
FROM  <YOUR_AGG_TABLE>
GROUP BY DATENAME(WEEKDAY, <DATETIME_COL>) + ' ' + CAST(DATEPART(HOUR, <DATETIME_COL>) AS varchar(8)) + ':00'

这就像你想要的那样创建基地。您可以使用此逻辑创建其他所需的agg。基地。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71459868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档