2016-12-02 6 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

его дает мне ошибку в SELECT, t1. * строка говорит: «Префикс столбца« t1 »не совпадает с именем таблицы или псевдонимом, используемым в запросе« – user1959064

+0

Обновлено Ans. Существует необязательный параметр ',' –

+0

, который дает ошибку на t1.Model = t2.Model .. он говорит t2.Model "Идентификатор мулитной части t2.Model 'не может быть привязан. То же самое для t2.Class и t2 .RN – user1959064

Смежные вопросы