У меня есть такая таблица:
+--------+--------+------+----------+----+----+
| id | id2 | id3 | date |at1 | at2|
+--------+--------+------+----------+----+----+
| 111 | | | 5/12/19 | a | |
| 111 | 10 | | 2/12/19 | b | j |
| 111 | 10 | 45 | 2/12/19 | f | |
| 111 | 10 | 45 | 3/12/19 | c | |
| 222 | 1010 | | 5/12/19 | | e |
| 222 | 1010 | 56 | 1/12/19 |a | d |
| 33 | 1010 | 56 | 5/12/19 | | c |
+---------------------------------------------+
Я хотел бы получить самые последние записи, основанные на date
и id
, и выставить только те строки, которые имеют комбинацию id
и(id2
или id3
). В приведенной мною таблице результат должен выглядеть следующим образом:
+--------+--------+------+----------+----+----+
| id | id2 | id3 | date |at1 | at2|
+--------+--------+------+----------+----+----+
| 111 | 10 | | 2/12/19 | b | j |
| 111 | 10 | 45 | 3/12/19 | c | a |
| 222 | 1010 | | 5/12/19 |a | e |
| 222 | 1010 | 56 | 1/12/19 |a | e |
| 33 | 1010 | 56 | 5/12/19 | | c |
+---------------------------------------------+
Я пытался реализовать его с помощью этого запроса (из другого вопроса), но мне не удалось, так как я не совсем знаком с sql:
select t.id, t.id2, t.id3, t.date,
coalesce(t.at1, g.at1) at1, coalesce(t.at2, g.at2) at2
from tab t inner join (
select id, id2, id3,
max(date) date, max(at1) at1, max(at2) at2
from tab
group by id2, id3
) g on g.pm = t.pm and g.pm2 <=> t.pm2 and g.pm3 <=> t.pm3 and g.date = t.date
Заранее спасибо.