2016-06-20 6 views
1

У меня есть ниже таблице -Получить конкретные элементы из раздела, которые не должны находиться в другом разделе

ID type group_name creation_date 1 A G1 C1 2 B G2 C2 3 C G2 C3 4 B G1 C4

Я хочу, чтобы извлечь старые элементы типа в каждой группе, но если этот элемент типа является последним пунктом в другой раздел, тогда я не буду извлекать это.

Итак, для G1 у меня будет 2 элемента A и B, где C1> C4
Для G2 у меня будет 2 элемента B и C, где C2> C3.

В идеале, B старше для группы G1 и C старше для группы G2

Но я не хочу, чтобы извлечь B для G1, так как он является последним для G2. Следовательно, выход должен быть только C.

Может ли кто-нибудь помочь, как я могу это достичь?

+0

Что произойдет, если у вас есть строки '5, D, G3, C5' и' 6, D, G4, C5' (тот же тип и дата создания, но разные имена групп и идентификаторы)? – MT0

+0

Для каждой группы я хочу извлечь все элементы, кроме последней. Если у меня есть еще 2 строки, содержащие группы G3 и G4, то я их не извлечу, так как они оба являются последними для своей группы – Neha

ответ

0

Запрос:

SELECT DISTINCT 
     type 
FROM (
    SELECT type, 
     rnk, 
     COUNT(CASE rnk WHEN 1 THEN 1 END) OVER (PARTITION BY type) AS ct 
    FROM (
    SELECT type, 
      RANK() OVER (PARTITION BY group_name ORDER BY creation_date DESC) AS rnk 
    FROM table_name 
) 
) 
WHERE rnk > 1 AND ct = 0; 

Выход:

TYPE 
---- 
C 

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

  • Нет связанных вопросов^_^