Как оформить выборку из базы из каждой группы значений по определённым параметрам?

Имеется табличка

Id | Name | Date | Other
----------------------------------------------------------------
1 | A | 2018-09-20 16:15:00 | 555
1 | A | 2018-09-22 15:25:00 | 666
1 | A | 2018-09-26 19:45:00 | 777
2 | B | 2018-08-15 12:22:00 | 555
2 | B | 2018-09-19 14:01:00 | 666
3 | C | 2018-09-26 09:39:00 | 555

Необходимо выбрать из неё строки, где значение по дате самое последнее значение И строку где Other = 555.

Научился пока выбирать последнюю по времени строку вот так:
select * from
(select * from table Date desc) as x
group by Id

Результатом выборки становится:
1 | A | 2018-09-26 19:45:00 | 777
2 | B | 2018-09-19 14:01:00 | 666
3 | C | 2018-09-26 09:39:00 | 555

ВОПРОС
Как сделать так, чтобы после строки с самым старшим значением в группе выводилась строка, где значение Other = 555?

Необходимо получить:
1 | A | 2018-09-26 19:45:00 | 777
1 | A | 2018-09-20 16:15:00 | 555
2 | B | 2018-09-19 14:01:00 | 666
2 | B | 2018-08-15 12:22:00 | 555
3 | C | 2018-09-26 09:39:00 | 555

^^^^^^^^^^^^
^^^^^^^^^
^^^^^^
^^^
PS. Есть ли возможность с помощью sql запроса сделать так чтобы выводилась строка, где в группе дата самая свежая, НО сам столбец дата в этой строке выводился бы из строки, где Other стоит 555? т.е. на имеющемся примере вывод сделать
1 | A | 2018-09-20 16:15:00 | 777
2 | B | 2018-08-15 12:22:00 | 666
3 | C | 2018-09-26 09:39:00 | 555
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nozzy
Symfony, Laravel, SQL
Не проверял
select
t2.Id,
t2.Name,
t3.Date,
t2.Other
from
(
select
    t1.Id,
    t1.Name,
    t1.Date,
    t1.Other
    from your_table t1
    where not exists (
        select 1 
        from your_table 
        where Id = t1.Id
        and Date > t1.Date
    )
) t2 join (
			select 
			Id,
			Name,
			Date as Date,
			Other
			from test4 
			where Other = 555	
    ) t3 on t3.Id = t2.Id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы