mysql - 在对另一列求和时选择具有最小日期的行
问题描述
我在 MySQL 中有下表:
我想获取count
列的总和,但到期日期应显示为 null 或带有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;
它给出了以下结果:
我所需的结果应该2
在第一行中作为 id 而不是1
并且expiry_date
应该是最小值,即2010-01-01 00:00:00
:
解决方案
将表连接到计算总数并返回最小日期的查询:
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 <=>
for以防万一 min是.expiry_date
ON
expiry_date
null
见演示。
结果:
> id | package_id | total | expiry_date
> -: | ---------: | ----: | :----------
> 2 | 3 | 20 | 2010-01-01
> 3 | 4 | 40 | 2011-01-01