2017-02-23 164 views
1

У меня есть данные в следующем формате и вам нужна помощь в фильтрации выходных данных. попробовал несколько комбинаций, но не мог получить черезстрок фильтра оракула в зависимости от нескольких значений

данные, которые я имею

User Id Comments    Status Date  Set# 
123  First Edit    E  22-Feb-17 0 
123  First Edit    E  22-Feb-17 55 
123  First Edit    X  22-Feb-17 55 
123  First Edit    X  22-Feb-17 55 
123  Second Edit    X  22-Feb-17 55 
123  Second Edit    X  22-Feb-17 55 

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

Вывод должен выглядеть

User Id Comments    Status Date  Set# 
123  First Edit    E  22-Feb-17 0 
123  Second Edit    X  22-Feb-17 55 
+0

что заставляет вас выбрать строку с Status = 'E' и Set # = 0 для комментариев = 'First Edit', а не сказать Status = 'X' и Set # = 55? (Принимая во внимание, что таблицы кучи не имеют для них какого-либо конкретного порядка, поэтому «потому что это первая строка, перечисленная» ничего не значит, если вы не заказываете результаты по конкретным столбцам) – Boneist

+1

use 'rank() OVER ([query_partition_clause ] ORDER BY) с вашим запросом – edt

ответ

2

Я думаю, что вы просто хотите row_number():

select t.* 
from (select t.*, 
      row_number() over (partition by userId, comments order by date) as sequm 
     from t 
    ) t 
where seqnum = 1; 

Примечание: Вы говорите, что "выбрать первое вхождение этой строки". Таблицы SQL представляют неупорядоченные комплектов, поэтому нет первых появление. Этот ответ предполагает, что date фактически имеет компонент времени, который определяет порядок, который вы планируете использовать.

+0

да значение даты, показанное выше, является столбцом «timestamp», и имеет смысл сделать ранг, а затем взять 1-й ранг – TRR