Выберите только одну строку по большему количеству условий - PullRequest
0 голосов
/ 02 июля 2019

Этот запрос поддерживается PostgreSQL, но H2 не может выполнить запрос из-за Over (разбиение на). Вопрос в том, как выбрать только одну строку с последним созданным временем для разных значений в 2 столбцах.

Example:
id  name  created     ecid  psid
 1    aa  2019-02-07     1     1
 2    bb  2019-02-01     1     1
 3    cc  2019-02-05     2     2
 4    dd  2019-02-06     2     3
 5    ee  2019-02-08     2     3

Result:
id  name  created     ecid  psid
 1    aa  2019-02-07     1     1
 3    cc  2019-02-05     2     2
 5    ee  2019-02-08     2     3  




SELECT s.*, MAX(s.created) OVER (PARTITION BY s.ecid, s.psid) AS latest FROM ...
WHERE latest = created

Ответы [ 2 ]

1 голос
/ 02 июля 2019

использовать коррелированный подзапрос

select t1.* from table t1
where t1.created = ( select max(created) 
from table t2 where t1.ecid=t2.ecid and t1.psid=t2.psid)
0 голосов
/ 02 июля 2019

Использование NOT EXISTS:

select t.* from tablename t
where not exists (
  select 1 from tablename
  where ecid = t.ecid and psid = t.psid and created > t.created
) 
...