当前位置: 首页 > 面试题库 >

SQL Server:按小时和星期几的平均计数

詹弘毅
2023-03-14
问题内容

背景

我在SQL
Server环境中设置了一个表,该表包含我正在跟踪的各种活动的日志。特定的日志项使用唯一的代码对正在发生的活动进行分类,并且日期时间字段跟踪该活动的发生时间。

问题

我想使用单个查询或存储过程来获取平均每小时的活动计数,并按一周中的星期几进行分组。例子:

Day      | Hour | Average Count
-------------------------------
Monday   | 8    | 5
Monday   | 9    | 5
Monday   | 10   | 9
...
Tuesday  | 8    | 4
Tuesday  | 9    | 3
...etc

现在,我有一个查询设置,它每天会吐出每小时的计数,但是我的问题是要进一步向前发展,并在一周中的某天取得平均水平。这是我当前的查询:

SELECT CAST([time] AS date) AS ForDate,
   DATEPART(hour, [time]) AS OnHour,
   COUNT(*) AS Totals
FROM [log] WHERE [code] = 'tib_imp.8'
GROUP BY CAST(time AS date),
   DATEPART(hour,[time])
   ORDER BY ForDate Asc, OnHour Asc

关于如何实现此目标的任何建议?

提前致谢!


问题答案:

在这里猜测:

SELECT [Day], [Hour], [DayN], AVG(Totals) AS [Avg]
FROM
  (
        SELECT 
          [Day]  = DATENAME(WEEKDAY, [time]),
          [DayN] = DATEPART(WEEKDAY, [time]),
          [Hour] = DATEPART(HOUR,    [time]),
          Totals = COUNT(*)
        FROM dbo.[log] 
            WHERE [code] = 'tib_imp.8'
        GROUP BY 
          DATENAME(WEEKDAY, [time]),
          DATEPART(WEEKDAY, [time]),
          DATEPART(HOUR,    [time])
  ) AS q
GROUP BY [Day], [Hour], [DayN]
ORDER BY DayN;

同样,如果没有数据,我可能会再次在墙上扔一些泥浆,希望它能粘住,但也许您需要的是:

SELECT [Day], [Hour], [DayN], AVG(Totals) AS [Avg]
FROM
(
    SELECT 
  w = DATEDIFF(WEEK, 0, [time]),
      [Day]  = DATENAME(WEEKDAY, [time]),
      [DayN] = DATEPART(WEEKDAY, [time]),
      [Hour] = DATEPART(HOUR,    [time]),
      Totals = COUNT(*)
    FROM dbo.[log] 
      WHERE [code] = 'tib_imp.8'
    GROUP BY 
  DATEDIFF(WEEK, 0, [time]),
      DATENAME(WEEKDAY, [time]),
      DATEPART(WEEKDAY, [time]),
      DATEPART(HOUR,    [time])
  ) AS q
GROUP BY [Day], [Hour], [DayN]
ORDER BY DayN;

这也将产生基于整数的平均值,因此您可能希望将内部查询上的Totals别名转换为DECIMAL(something,something)。



 类似资料:
  • 问题内容: 我有以下类型的文件: 我想按星期几计算文件数。例如,x消息在星期一发送,y消息在星期二发送,依此类推。 我已经使用date_histogram进行汇总,但是它会按日向我返回文档。它确实返回了当天,但是说“ 22周三”和“ 29周三”作为单独的汇总文档返回。 这在某种程度上与Elasticsearch有关-按星期和小时的天分组,但是该问题没有答案,因此我将其重新发布。根据那里的建议,它要

  • 问题内容: 我希望我能弄清楚。我需要生成一个平均值为AVG_AMT(整数)的表,并且没有小数。它可以舍入或截断。这张桌子真的没关系。 这是我试图写的: 有什么建议? 问题答案:

  • 问题内容: 我在SQLite中有一个名为param_vals_breaches的表,如下所示: 我想编写一个查询,以小时为基础,向我显示一个特定的队列(例如“ a ”),每个队列的平均 参数 为 param_val 和 违规 数。因此,转置数据以获得如下所示的内容: 这可能吗?我不确定该怎么做。谢谢! 问题答案: SQLite没有PIVOT函数,但是您可以将聚合函数与表达式结合使用,以将行变成列:

  • 问题内容: 给定一个星期数,例如,您如何计算从星期一开始的那一周中的天数? 第40周的rfc-3339输出示例: 问题答案: PHP 下面的帖子是因为我是个白痴,没有正确阅读问题,但是会获得从星期一开始的一周中的日期,给出的是日期,而不是星期数。 在PHP中 ,改编自PHP日期手册页上的这篇文章 来自的输出:

  • 问题内容: 如何获得当前一周的星期一和星期五的日期? 我有以下代码,但是如果当前日期是星期日或星期六,则它将失败。 问题答案: 这些strtotime输入效果很好: 您需要做的就是将逻辑包装在一些if语句中。

  • 本文向大家介绍js显示当前日期时间和星期几,包括了js显示当前日期时间和星期几的使用技巧和注意事项,需要的朋友参考一下 JavaScript获取当前日期时间同时显示星期几,具体代码如下: 在网页上及时动态显示当前的日期时间并显示星期的做法: 关于这方面的内容网上很多,有js获取当前日期时间同时显示星期,js获取当前时间和一星期钱的时间等内容,都很具有参考价值,希望大家多阅读类似文章,将类似方法熟练