【问题标题】:Counting records and grouping results by time of day按时间计算记录和分组结果
【发布时间】:2017-01-25 10:16:08
【问题描述】:

我有点习惯 SQL,但我需要你的帮助来编写我认为是复杂的表达式。这是上下文。为了简化,我有一个记录表,其中包含记录 ID (record_id)、呼叫时间 (call_time) 和计划时间 (dial_schedule_time)。 我正在尝试按时间细分记录数。为了让您了解我想要实现的目标,我的查询结果应返回如下内容:

Now     |8      |9      |10     |11     |12     |13     |14     |15     |16     |17     |18     |19     |20     |
xxx     |xxx    |xxx    |xxx    |xxx    |xxx    |xxx    |xxx    |xxx    |xxx    |xxx    |xxx    |xxx    |xxx    |

其中 xxx 表示一天中按时间范围分组的 record_id 计数。要指定,“现在”表示 call_time 为 null 或 dial_schedule_time 值低于当前日期的 record_id 计数(不包括一天中的小时,例如,如果它是在我运行查询 25/01 的那一刻@ 10am,“现在”将是 record_id 的计数,其中 call_time 为空或 dial_schedule_time

我真的不知道从哪里开始,所以任何帮助将不胜感激。

谢谢你:)

样本数据:

record_id   call_time   dial_sched_time
447495      1475887698  1485324000
447492      1479705246  1485320400
447488      NULL        1366005540
447485      NULL        1367193360
447482      NULL        1366701480
447478      NULL        1366705440
447476      NULL        1370502240
447471      NULL        1367816160
447469      NULL        1367564640
447468      1479705267  1485320400
447467      1476680578  1485320400
447466      NULL        1368767580
447531      1479169276  1479180158
447530      1479169360  1479180189
447529      NULL        1369105020

【问题讨论】:

  • pivot 是你的朋友。请分享示例数据和预期的结果,我可以尝试编写
  • 是的。编写一个查询以生成一个包含您想要的每个计数的行,然后使用 PIVOT(或 UNPIVOT)获取它并为每个结果生成一行和一列。
  • 问题是我一直坚持编写查询来获取这些时间范围。

标签: sql sql-server


【解决方案1】:

要将 Unix 时间戳转换为 SQL 日期格式,请尝试使用 dateadd(s, @UnixTimestamp, '1970-01-01')。 例如 dateadd(s, 1474431093, '1970-01-01') = 2016-09-21 04:11:33.000 现在,您可以使用 group by over datepart(hh,dateadd(s, field_UnixTimestamp, '1970-01-01')) 和 COUNT() 子句来获取每小时的通话次数。

希望对你有所帮助。

【讨论】:

  • 哦...对不起...并使用 PIVOT 来“旋转”查询结果
猜你喜欢
  • 2014-12-19
  • 2020-10-13
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多