Выбор строки с минимальной датой при суммировании другого столбца - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть таблица ниже в MySQL:

enter image description here

Я хочу получить сумму в столбце count, но должна быть указана дата окончания срока действия либо ноль, либо наименьшая дата с group by package_id.

У меня есть запрос ниже:

select mt.id, mt.package_id, sum(mt.count), mt.expiry_date
from my_table mt left join my_table mt2 on mt.id = mt2.id and mt.expiry_date < mt2.expiry_date
group by mt.package_id;

Это дает результат ниже:

enter image description here

Мой требуемый результат должен иметь 2 в качестве идентификатора в первой строке вместо 1, а expiry_date должно быть минимумом, равным 2010-01-01 00:00:00:

enter image description here

1 Ответ

1 голос
/ 29 апреля 2020

Присоедините таблицу к запросу, который вычисляет сумму и возвращает минимальную дату:

select m.id, m.package_id, t.total, m.expiry_date
from my_table m
inner join (
  select package_id, 
         sum(count) total, 
         min(expiry_date) expiry_date
  from my_table
  group by package_id
) t on t.package_id = m.package_id and t.expiry_date <=> m.expiry_date

Я использую NULL-safe equal operator <=> для expiry_date в предложении ON на всякий случай мин expiry_date составляет null.

См. Демоверсию . Результаты:

> id | package_id | total | expiry_date
> -: | ---------: | ----: | :----------
>  2 |          3 |    20 | 2010-01-01 
>  3 |          4 |    40 | 2011-01-01 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...