计数记录并按一天中的时间对结果进行分组



我有点习惯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的计数。要指定,"Now"表示call_time为null或dial_schedule_time值低于当前日期的record_id的计数(不包括一天中的小时,因此,例如,如果是在我运行查询25/01@10am的那一刻,则"Now"将是call_time为null或dial_schedule_time<25/01的record_id的计数)。其他数字(8、9、10…)表示record_id的计数,其中dial_sched_time介于今天8-9、今天9-10、今天10-11。。。为了让事情变得更困难,dial_sched_time是一个UNIX时间戳,需要在进行分组时考虑到这是新西兰时间(例如1474431093是2016年9月21日04:11 GMT,但是2016年7月21日16:11 NZT)。

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

谢谢:)

样本数据:

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

要将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()子句来获取每小时的调用次数。

我希望我帮了你。

最新更新