当前位置: 代码迷 >> Sql Server >> 分组顺次比较同一列不同行时间的大小
  详细解决方案

分组顺次比较同一列不同行时间的大小

热度:107   发布时间:2016-04-24 08:51:25.0
分组依次比较同一列不同行时间的大小。
有一张表:
生产订单号 工序号 完工日期
20150923 0010 2015-11-25
20150923 0020 2015-11-1
20150923 0030 2015-11-2
20150922 0010 2015-10-1
20150922 0020 2015-10-1
20150922 0030 2015-9-23
20150921 0010 2015-9-21
20150921 0020 2015-9-1
20150921 0030 2015-9-21
20150921 0040 2015-9-30
这张表本来的逻辑是:同一生产订单号,下道工序比上道工序完工日期晚。
但是人为调整后,出现了同一生产订单号,下道工序比上道工序完工日期早。

我想要比较同一生产订单号,0010跟0020比,0020跟0030比,依次类推,一直比较到最后一道工序,找出下道工序比上道工序完工日期早的。
------解决思路----------------------

declare @Data table (
 D INT  ,
 G CHAR(4) ,
 W DATE)

 INSERT INTO @Data
SELECT 20150923 ,'0010', '2015-11-2' UNION ALL
SELECT 20150923 ,'0020', '2015-11-1' UNION ALL
SELECT 20150923 ,'0030', '2015-11-2' UNION ALL
SELECT 20150922 ,'0010', '2015-10-1' UNION ALL
SELECT 20150922 ,'0020', '2015-10-1' UNION ALL
SELECT 20150922 ,'0030', '2015-9-23' UNION ALL
SELECT 20150921 ,'0010', '2015-9-21' UNION ALL
SELECT 20150921 ,'0020', '2015-9-1 ' UNION ALL
SELECT 20150921 ,'0030', '2015-9-21' UNION ALL
SELECT 20150921 ,'0040', '2015-9-30' 

;With T as (
select row_number() over (partition by D order by G ) as RowNO,* from @Data
)

 SELECT * FROM T a left join T b on a.D = b.D and a.RowNO = b.RowNO - 1
 where a.w > b.w

  相关解决方案