求助:分段查询记录
时间:2011-12-22
来源:互联网
有如下记录
phonenum logintime status
15308615031 2011-09-04 00:01:51 熄火
15308615031 2011-09-04 00:01:52 熄火
15308615031 2011-09-04 00:01:53 停车
15308615031 2011-09-04 00:01:54 停车
15308615031 2011-09-04 00:01:55 熄火
15308615031 2011-09-04 00:01:56 熄火
15308615032 2011-09-04 00:01:52 停车
15308615032 2011-09-04 00:01:53 停车
15308615032 2011-09-04 00:01:54 熄火
15308615032 2011-09-04 00:01:55 熄火
怎么样通过存储过程得到如下格式的结果啊
号码 熄火开始时间 熄火结束时间
15308615031 2011-09-04 00:01:51 2011-09-04 00:01:52
15308615031 2011-09-04 00:01:55 2011-09-04 00:01:56
15308615032 2011-09-04 00:01:54 2011-09-04 00:01:55
请高手指点啊
phonenum logintime status
15308615031 2011-09-04 00:01:51 熄火
15308615031 2011-09-04 00:01:52 熄火
15308615031 2011-09-04 00:01:53 停车
15308615031 2011-09-04 00:01:54 停车
15308615031 2011-09-04 00:01:55 熄火
15308615031 2011-09-04 00:01:56 熄火
15308615032 2011-09-04 00:01:52 停车
15308615032 2011-09-04 00:01:53 停车
15308615032 2011-09-04 00:01:54 熄火
15308615032 2011-09-04 00:01:55 熄火
怎么样通过存储过程得到如下格式的结果啊
号码 熄火开始时间 熄火结束时间
15308615031 2011-09-04 00:01:51 2011-09-04 00:01:52
15308615031 2011-09-04 00:01:55 2011-09-04 00:01:56
15308615032 2011-09-04 00:01:54 2011-09-04 00:01:55
请高手指点啊
作者: chenzt124 发布时间: 2011-12-22
为了思路清楚,用CTE写了个。。
SQL code
SQL code
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB GO CREATE TABLE TB( phonenum VARCHAR(50) ,logintime DATETIME ,status VARCHAR(10) ) GO INSERT INTO TB SELECT '15308615031','2011-09-04 00:01:51','熄火' UNION ALL SELECT '15308615032','2011-09-04 00:01:54','熄火' UNION ALL SELECT '15308615031','2011-09-04 00:01:53','停车' UNION ALL SELECT '15308615031','2011-09-04 00:01:54','停车' UNION ALL SELECT '15308615031','2011-09-04 00:01:55','熄火' UNION ALL SELECT '15308615031','2011-09-04 00:01:56','熄火' UNION ALL SELECT '15308615032','2011-09-04 00:01:52','停车' UNION ALL SELECT '15308615032','2011-09-04 00:01:53','停车' UNION ALL SELECT '15308615031','2011-09-04 00:01:52','熄火' UNION ALL SELECT '15308615032','2011-09-04 00:01:55','熄火' GO ;WITH MU AS ( SELECT PHONENUM,LOGINTIME,STATUS ,ROW_NUMBER() OVER(PARTITION BY PHONENUM ORDER BY LOGINTIME) AS NUM ,RANK() OVER (ORDER BY PHONENUM) AS NUM2 FROM TB ),MU2 AS ( SELECT *,ROW_NUMBER() OVER(PARTITION BY PHONENUM ORDER BY LOGINTIME) AS NUM3 FROM MU T1 WHERE NOT EXISTS( SELECT 1 FROM MU T2 WHERE T2.NUM2=T1.NUM2 AND T2.NUM=T1.NUM-1 AND T2.STATUS='熄火' ) AND STATUS='熄火' ),MU3 AS ( SELECT *,ROW_NUMBER() OVER(PARTITION BY PHONENUM ORDER BY LOGINTIME) AS NUM3 FROM MU T1 WHERE NOT EXISTS( SELECT 1 FROM MU T2 WHERE T2.NUM2=T1.NUM2 AND T2.NUM=T1.NUM+1 AND T2.STATUS='熄火' ) AND STATUS='熄火' ) SELECT MU2.PHONENUM,MU2.LOGINTIME,MU3.LOGINTIME FROM MU2 INNER JOIN MU3 ON MU2.PHONENUM=MU3.PHONENUM AND MU2.NUM3=MU3.NUM3 /* 15308615031 2011-09-04 00:01:51.000 2011-09-04 00:01:52.000 15308615031 2011-09-04 00:01:55.000 2011-09-04 00:01:56.000 15308615032 2011-09-04 00:01:54.000 2011-09-04 00:01:55.000 */
作者: kuqideyupian 发布时间: 2011-12-22
http://topic.csdn.net/u/20090917/16/dc77bfd0-78e9-4837-9b46-388446691676.html?53633
与这个的差别就在于没有合并列值
与这个的差别就在于没有合并列值
作者: fredrickhu 发布时间: 2011-12-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28