56,677
社区成员
发帖
与我相关
我的任务
分享
select group1,date(date_time), ceil((UNIX_TIMESTAMP(date_time1)-UNIX_TIMESTAMP(date_time))/60) as time_len ,obj_value from (
select tt.*,t.date_time1 from t tt ,(select group1,date_time as date_time1 from t) t
where tt.group1=t.group1 and tt.date_time<>t.date_time1 and tt.date_time<t.date_time1
) asd
group by
group1,date(date_time),obj_value
mysql> select * from t;
+----+--------+---------------------+-----------+
| id | group1 | date_time | obj_value |
+----+--------+---------------------+-----------+
| 1 | g1 | 2011-02-01 00:00:00 | 1 |
| 2 | g2 | 2011-02-01 00:00:00 | 0 |
| 3 | g3 | 2011-02-01 00:00:00 | 0 |
| 4 | g2 | 2011-02-01 10:00:00 | 1 |
| 5 | g2 | 2011-02-01 12:00:00 | 0 |
| 6 | g1 | 2011-02-01 18:00:00 | 0 |
| 7 | g1 | 2011-02-01 23:59:59 | 0 |
| 8 | g2 | 2011-02-01 23:59:59 | 0 |
| 9 | g3 | 2011-02-01 23:59:59 | 0 |
+----+--------+---------------------+-----------+
9 rows in set (0.02 sec)
mysql> Select group1,date(date_time) as date_time,obj_value,
-> CEILING(sum(UNIX_TIMESTAMP(next_date_time)-UNIX_TIMESTAMP(date_time))/60) as time_len
-> from(
-> select *,
-> (Select MIN(date_time) from t Where group1=a.group1 And date(date_time)=date(a.date_time) and date_time>a.date_time) as next_date_time
-> from t a
-> ) u
-> Group by group1,date(date_time),obj_value;
+--------+------------+-----------+----------+
| group1 | date_time | obj_value | time_len |
+--------+------------+-----------+----------+
| g1 | 2011-02-01 | 0 | 360 |
| g1 | 2011-02-01 | 1 | 1080 |
| g2 | 2011-02-01 | 0 | 1320 |
| g2 | 2011-02-01 | 1 | 120 |
| g3 | 2011-02-01 | 0 | 1440 |
+--------+------------+-----------+----------+
5 rows in set (0.02 sec)
mysql>