按时间计算记录和分组结果

时间:2017-01-24 20:35:57

标签: sql sql-server

我有点习惯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”将是record_id的计数,其中call_time为null或dial_schedule_time为< 25/01)。其他的(8,9,10 ......)表示record_id的计数,其中dial_sched_time在今天的8-9之间,今天的9-10,今天的10-11 ...... 为了使事情变得更加困难,dial_sched_time是一个UNIX时间戳,并且需要在考虑到这是新西兰时间的情况下进行分组(例如1474431093是2016年9月21日格林威治标准时间04:11但是2016年9月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

1 个答案:

答案 0 :(得分:0)

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

我希望我帮助过你。