SQL: сгруппировать с несколькими значениями и избежать нуля в этой группе - PullRequest
0 голосов
/ 22 сентября 2018

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

    Trans Date  Trans id    Name
12/1/2017 14:44 T1  
12/1/2017 16:44 T1          test
12/1/2017 16:44 T2  

Нужен вывод как этот

Trans Date       Trans id   Name
12/1/2017 14:44     T1      test
12/1/2017 16:44     T2  

Я пробовал запрос, как это, но он дает мне две строки имени

select unique min(Trans Date), Trans id, Name from tabl1 group by Trans id, Name

но получаю все результаты.Пожалуйста, предложите

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Часто наиболее эффективным методом в Oracle является использование keep:

select trans_id, min(trans_date),
       min(name) keep (dense_rank first order by trans_date desc) as name
from tab1
group by trans_id;
0 голосов
/ 22 сентября 2018

Мы можем сделать это с помощью аналитических функций row_number и max.

Также использование имен столбцов с пробелами должно быть заключено в Double Quotes, но это будет case sensitive.Проверьте правильность имен столбцов в определении таблицы.

select "Trans id" ,"Trans Date",m_name as name
from 
(
select t.*, 
 row_number() over (partition by "Trans id" order by "Trans Date") as rn
 ,max(name) over (partition by "Trans id" order by "Trans Date") as m_name
from table1 t
)
where rn=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...