日期:2014-05-18  浏览次数:20560 次

求高手 sql 按分钟统计
ID RegisterDate RegisterTime StudiesDoneDate StudiesDoneTime
1 20080320 152314 20080320 152629
2 20080320 152425 20080320 153100
3 20080320 153113 20080320 153543
4 20080320 153339 20080320 154206
5 20080320 154703 20080320 155504
6 20080320 154910 20080320 155417
7 20080320 155041 20080320 160022
有一个月的数据,几十万条,现在我想统计每天8:00-17:00每分钟该时刻前面有多少个已经登记(RegisterTime)的但是还没检查(StudiesDoneTim)的人次。统计结果插入到新表中。
得到的统计表:
RegisterDate 8:01 8:02 8:03 .... 16:59 17:00
20080301 人数 人数 .... 人数 人数
20080302
  ..
  ..
这只是我自己设计的统计表,问下高手这样设计 列数会不会太多,是否还有其他的设计方法

------解决方案--------------------
探讨
ID RegisterDate RegisterTime StudiesDoneDate StudiesDoneTime
1 20080320 152314 20080320 152629
2 20080320 152425 20080320 153100
3 20080320 153113 20080320 153543
4 20080320 153339 20080320 154206……

------解决方案--------------------
行转列,看经典代码收藏。
------解决方案--------------------
SQL code

select datediff(mi,'2012-01-01 08:00:00','2012-01-01 17:00:00')+1

-----------
541

(1 row(s) affected)

------解决方案--------------------
需要的太多了吧。你用的完吗

人家看的来这么多吗
------解决方案--------------------
建议在前端程序中统计,以数组的形式保存结果,

然后,然后绘制曲线图.
------解决方案--------------------
你讲的不是很清楚啊
------解决方案--------------------
唐诗哥哥给的意见不错。你这个假如在数据库段进行行列转换的话实现也是可以的,
但是那样很不好,有好几百个字段

探讨

大家多给给点意见啊,小弟求教

------解决方案--------------------
楼主那样设计,只是扩展性不好,以后你想增加某一时间点的统计,就要增加字段,这样导致之前数据存在null值或0值。相同的道理,减少某一时间点的统计,也会出现null值或0值的情况。

如果按每一天每一个时间点,设计成一行。对于扩展性就比较好。只是要考虑在数据量大的情况,行列转换的成本。

结合实际环境,对这两点做评估,你自然会找到哪一种设计比较好。