2016-12-02 47 views
1

我正在寻找显示SQL表中某些行的基于后面的行条目称为部分。 请参阅下面的列表。我想显示行中没有为每个特定模型和零件的后续行中的类0。显示基于其他行标准的行

Log | SourceTime| Class| model | part 
----+-----------+------+-------+----- 
614 | 14:14  | 0 | FORD | right wing 
613 | 14:13  | 1 | FORD | right wing 
612 | 14:12  | 1 | TOYOTA| left wing 
611 | 14:11  | 0 | TOYOTA| right wing 
610 | 14:10  | 1 | TOYOTA| right wing 
609 | 14:09  | 0 | OPEL | right lamp 
608 | 14:08  | 1 | OPEL | right lamp 
607 | 14:07  | 1 | OPEL | back right wheel 
606 | 14:06  | 0 | FORD | right wheel 
605 | 14:05  | 1 | FORD | right wheel 

这2行应该显示

612 | 14:12  | 1 | TOYOTA| left wing 
607 | 14:07  | 1 | OPEL | back right wheel 

回答

1

试试这个:在同一个表的多个CTE可以解决你的问题

WITH t1 AS(

     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY LOG ORDER BY LOG) RN 
     FROM TableName 
), 
t2 AS(

     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY LOG ORDER BY LOG) RN 
     FROM TableName 
) 
SELECT t1.* 
FROM t1 
WHERE Class <> 0 AND 
     NOT EXISTS (SELECT 1 
        FROM t2 
        WHERE t1.Model=t2.Model AND 
         t2.Class = 0 AND 
         t2.RN > t1.RN) 
+0

它让我在选择T1错误。 *表示“列前缀't1'与查询中使用的表名或别名不匹配” – user1959064

+0

已更新的答案。在t1.Model = t2.Model中有一个额外的不必要的'',' –

+0

它给出错误。它表示t2.Model“多部分标识符't2.Model'不能被绑定。对于t2.Class和t2是相同的.RN – user1959064