日期:2014-05-18  浏览次数:20570 次

困扰了一天的SQL语句,请各位高手指点,谢谢!
表结构及部分内容如下:
物料编码   更新记录号   更新时间   属性1   属性2   属性3
000001       0                     20070908   p11       p22       p3
000001       1                     20070910   p1         p2         p3
000001       2                     20070915   p1         p2         p3
000001       3                     20070918   p11       p2         p31
000001       4                     20070918   p11       p2         p31
000001       5                     20070920   p1         p2         p3
000001       6                     20070920   p1         p2         p3
000001       7                     20070921   p1         p2         p3
000001       8                     20070922   p1         p2         p3
000001       9                     20070925   p1         p22       p3
……
要求,对于连续的几条更改记录,如果(属性1+属性2+属性3)没有变化,则保留更新记录号最大的那条记录。同时更新记录号为0的是当前有效记录,须保留。

对于上面的记录,最终的查询结果应该是:
物料编码   更新记录号   更新时间   属性1   属性2   属性3
000001       0                     20070908   p11       p22       p3
000001       2                     20070915   p1         p2         p3
000001       4                     20070918   p11       p2         p31
000001       8                     20070922   p1         p2         p3
000001       9                     20070925   p1         p22       p3

请各位高手指教,谢谢!

------解决方案--------------------
--看看是不是你要的
create table T(num varchar(10), flag int,[date] datetime, value1 varchar(10), value2 varchar(10), value3 varchar(10))
insert into T
select '000001 ', 0, '20070908 ' , 'p11 ', 'p22 ' , 'p3 ' union all
select '000001 ' , 1, '20070910 ', 'p1 ' , 'p2 ' , 'p3 ' union all
select '000001 ' , 2, '20070915 ' , 'p1 ' , 'p2 ' , 'p3 ' union all
select '0