您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

在这里猜测:

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;
@H_403_5@

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

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;
@H_403_5@

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

解决方法

背景

我在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),[time])
   ORDER BY ForDate Asc,OnHour Asc

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

提前致谢!

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
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;
@H_403_5@

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

解决方法

背景

我在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),[time])
   ORDER BY ForDate Asc,OnHour Asc

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

提前致谢!

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
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),[time])
   ORDER BY ForDate Asc,OnHour Asc

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

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

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

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

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

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

提前致谢!

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

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;
@H_403_5@

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

解决方法

背景

我在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),[time])
   ORDER BY ForDate Asc,OnHour Asc

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

提前致谢!

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
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),[time])
   ORDER BY ForDate Asc,OnHour Asc

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

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

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

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

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

提前致谢!

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

SQLServer 2022/1/1 18:45:13 有379人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶