我有点习惯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()子句来获取每小时的调用次数。
我希望我帮了你。