sql 相邻记录的不同字段(字段类型为DataTime)相比较
时间:2011-12-08
来源:互联网
单号 送修时间 维修完成时间
1 2011-10-9 2011-10-28
2 2011-10-25 2011-10-31
3 2011-11-16 2011-12-30
第二行的送修时间与第一行的维修完成时间的差,小于或者等于30,就把这条记录显示出来
效果如图:
单号 送修时间 维修完成时间
1 2011-10-9 2011-10-28
2 2011-10-25 2011-10-31
请教各位大虾指教指教,用sql怎样写才能得到效果图的数据??
作者: so_fantasy 发布时间: 2011-12-08
select * from tb where datediff(d,送修时间,维修完成时间)<=30
作者: qianjin036a 发布时间: 2011-12-08
select * from tb where datediff(day,送修时间,维修完成时间)<=30
作者: ssp2009 发布时间: 2011-12-08
select * from tb where datediff(day,送修时间,维修完成时间)<=30
应该是同一行的送修时间与维修完成时间比较吧
作者: so_fantasy 发布时间: 2011-12-08
作者: so_fantasy 发布时间: 2011-12-08
是第二行的送修时间-第一行的维修完成时间
select * from tb where datediff(day,送修时间,维修完成时间)<=30
应该是同一行的送修时间与维修完成时间比较吧
这样处理,就是同一行天数的差减.
作者: qianjin036a 发布时间: 2011-12-08
单号 送修时间 维修完成时间
1 2011-10-9 2011-10-10
2 2011-10-15 2011-10-31
3 2011-12-16 2011-12-30
效果如下:
单号 送修时间 维修完成时间
1 2011-10-9 2011-10-10
2 2011-10-15 2011-10-31
作者: so_fantasy 发布时间: 2011-12-08
--那:如果ID连续的话: select b.单号,a.送修时间,b.维修完成时间 from tb a inner join tb b on a.单号=b.单号+1 where datediff(d,a.送修时间,b.维修完成时间)<=30
如果单号不连续的话,要用row_number()函数创建一个连续的编号,代替上面的单号.
作者: qianjin036a 发布时间: 2011-12-08
SQL code
select a.* from tb a inner join tb b on a.单号=b.单号-1 where datediff(d,a.维修完成时间,b.送修时间)<=30
作者: qianjin036a 发布时间: 2011-12-08
create table A表(单号 int, 送修时间 date,维修完成时间 date) insert into A表 select 1, '2011-10-9', '2011-10-10' union all select 2, '2011-10-15', '2011-10-31' union all select 3, '2011-12-16', '2011-12-30' select a.* from A表 a left join A表 b on a.单号-1=b.单号 where b.单号 is null or datediff(dd,b.维修完成时间,a.送修时间)<=30 单号 送修时间 维修完成时间 ----------- ---------- ---------- 1 2011-10-09 2011-10-10 2 2011-10-15 2011-10-31 (2 row(s) affected)
作者: ap0405140 发布时间: 2011-12-08
那你表中的第二行就不会显示了.因为它与第三行天数差已经大于30了!
作者: qianjin036a 发布时间: 2011-12-08
SQL code
--那:如果ID连续的话:
select b.单号,a.送修时间,b.维修完成时间
from tb a inner join tb b on a.单号=b.单号+1
where datediff(d,a.送修时间,b.维修完成时间)<=30
如果单号不连续的话,要用row_number()函数创建一个连续的编号,代替上面的单号.
这个方法可行喔!
那我还有个难点就是:
A表数据如下:
单号 条码 送修时间 维修完成时间
1 A 2011-10-9 2011-10-10
2 A 2011-10-15 2011-10-31
3 A 2011-12-16 2011-12-30
4 B 2011-9-10 2011-9-15
5 B 2011-11-10 2011-11-20
6 C 2011-12-1 2011-12-3
7 C 2011-12-5 2011-12-6
效果如下:
单号 条码 送修时间 维修完成时间
1 A 2011-10-9 2011-10-10
2 A 2011-10-15 2011-10-31
6 C 2011-12-1 2011-12-3
7 C 2011-12-5 2011-12-6
用sql怎样实现??在此十分感谢
作者: so_fantasy 发布时间: 2011-12-08
引用 7 楼 qianjin036a 的回复:
SQL code
--那:如果ID连续的话:
select b.单号,a.送修时间,b.维修完成时间
from tb a inner join tb b on a.单号=b.单号+1
where datediff(d,a.送修时间,b.维修完成时间)<=30
如果单号不连续的话,要用row_number()函数创建一个连续的编号,……
按照9喽的方法应该可以。
作者: fredrickhu 发布时间: 2011-12-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28