sql中同一个表的上下两行之间的某个字段相减有关问题
2013-06-27 14:51
246 查看
sql中同一个表的上下两行之间的某个字段相减问题
各位,现在我遇到这样一个问题,如下描述:
表A结构如下:
job gx_id start_time end_time
0001011-3-1 10 2010-5-10 10:00:00 2010-5-10 15:23:10
0002695-1-2 30 2010-5-10 15:30:00 2010-5-10 18:00:00
0003625-6-2 60 2010-5-11 07:20:05 2010-5-11 11:30:00
0009658-8-1 20 2010-5-12 09:20:30 2010-5-13 12:10:00
......
我想得到表A第一行的 "end_time "与第二行的 "start_time "相减的值,第二行的 "end_time "与第三行的 "start_time "相减的值,第三行的 "end_time "与第四行的 "start_time "相减的值,以此类推,请问怎样实现呢?
------解决方案--------------------------------------------------------
各位,现在我遇到这样一个问题,如下描述:
表A结构如下:
job gx_id start_time end_time
0001011-3-1 10 2010-5-10 10:00:00 2010-5-10 15:23:10
0002695-1-2 30 2010-5-10 15:30:00 2010-5-10 18:00:00
0003625-6-2 60 2010-5-11 07:20:05 2010-5-11 11:30:00
0009658-8-1 20 2010-5-12 09:20:30 2010-5-13 12:10:00
......
我想得到表A第一行的 "end_time "与第二行的 "start_time "相减的值,第二行的 "end_time "与第三行的 "start_time "相减的值,第三行的 "end_time "与第四行的 "start_time "相减的值,以此类推,请问怎样实现呢?
------解决方案--------------------------------------------------------
select datediff(mi,b.start_time ,a.end_time) from (select id=row_number()over(order by getdate()),* from tb)a, (select id=row_number()over(order by getdate()),* from tb)b where a.id=b.id-1 ------解决方案--------------------------------------------------------
---------------------------------------------------------------------------------- -- Author : htl258(Tony) -- Date : 2010-05-10 11:37:00 -- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) -- Jul 9 2008 14:43:34 -- Copyright (c) 1988-2008 Microsoft Corporation -- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3) -- Blog : http://blog.csdn.net/htl258 ---------------------------------------------------------------------------------- --> 生成测试数据表: [tb] IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb] ([job] [nvarchar](20),[gx_id] [int],[start_time] [datetime],[end_time] [datetime]) INSERT INTO [tb] SELECT '0001011-3-1','10','2010-5-10 10:00:00','2010-5-10 15:23:10' UNION ALL SELECT '0002695-1-2','30','2010-5-10 15:30:00','2010-5-10 18:00:00' UNION ALL SELECT '0003625-6-2','60','2010-5-11 07:20:05','2010-5-11 11:30:00' UNION ALL SELECT '0009658-8-1','20','2010-5-12 09:20:30','2010-5-13 12:10:00' --SELECT * FROM [tb] --我想得到表A第一行的 "end_time "与第二行的 "start_time "相减的值,第二行的 "end_time "与第三行的 "start_time "相减的值, --第三行的 "end_time "与第四行的 "start_time "相减的值,以此类推,请问怎样实现呢? -->SQL查询如下: ;with t as ( select rn=row_number()over(ORDER by job),* from tb ) select a.*,val=datediff(mi,a.end_time,b.bstart_time) from t a outer apply( select bstart_time=start_time from t where a.rn=rn-1 ) b /* rn job gx_id start_time end_time val -------------------- -------------------- ----------- ----------------------- ----------------------- ----------- 1 0001011-3-1 10 2010-05-10 10:00:00.000 2010-05-10 15:23:10.000 7 2 0002695-1-2 30 2010-05-10 15:30:00.000 2010-05-10 18:00:00.000 800 3 0003625-6-2 60 2010-05-11 07:20:05.000 2010-05-11 11:30:00.000 1310 4 0009658-8-1 20 2010-05-12 09:20:30.000 2010-05-13 12:10:00.000 NULL (4 行受影响) */
相关文章推荐
- 在论坛中出现的比较难的sql问题16:取一个字段中的数字
- sql利用视图实现一个数值型字段的求和问题
- SQL两表之间:根据一个表的字段更新另一个表的字段
- 在论坛中出现的比较难的sql问题:16(取一个字段中的数字)
- SQL两表之间:根据一个表的字段更新另一个表的字段
- sql语句问题 通过联立两个表更新其中一个表的字段
- 有关读取SQL里TEXT和NTEXT类型字段内容的问题
- 大家好 ,遇到一个怪怪的有关问题,tomcat节点之间互相发现不了
- 【数据库】SQL两表之间:根据一个表的字段更新另一个表的字段
- SQLQuery 查询Oracle char类型返回一个字符有关问题
- SQL——两个表之间的更新:用一个表的字段更新另一个表的字段
- 父类子类之间的一个经典题目(有关成员变量何时赋值和在哪里赋值的问题)
- SQL两表之间:根据一个表的字段更新另一个表的字段
- SQL order by ID desc/asc加一个排序的字段解决查询慢问题
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- sql语句问题 通过联立两个表更新其中一个表的字段
- Sql 一个表中的字段的更新来源于另一个表的字段的更新
- sql表查询某一字段为空的记录的问题
- sql语句之表间字段值复制遇到的一些问题--基于mysql