如果我在MySQL中具有下表:
date type amount
2017-12-01 3 2
2018-01-01 1 100
2018-02-01 1 50
2018-03-01 2 2000
2018-04-01 2 4000
2018-05-01 3 2
2018-06-01 3 1
...是否可以找到与每个amount
的最新date
相对应的type
的总和?对于任何给定的date
,保证没有重复的type
。
我希望从上面的数据中得到的答案可能像这样分解:
date
1的最新type
是2018-02-01,其中amount
是50; date
2的最新type
是2018-04-01,其中amount
是4000; date
最近的type
是2018-06-01,其中amount
是1; 有没有一种方法可以在单个查询中直接到达4051?这适用于使用MySQL的Django项目,如果有区别的话;我也找不到与ORM相关的解决方案,因此认为原始SQL查询可能是一个更好的起点。
谢谢!
答案 0 :(得分:3)
不确定对于Django,但在原始sql中,您可以使用自我联接根据最新日期为每种类型选择最新行,然后汇总结果以获取每种类型的金额总和
select sum(a.amount)
from your_table a
left join your_table b on a.type = b.type
and a.date < b.date
where b.type is null
或
select sum(a.amount)
from your_table a
join (
select type, max(date) max_date
from your_table
group by type
) b on a.type = b.type
and a.date = b.max_date
或通过使用相关的字幕
select sum(a.amount)
from your_table a
where a.date = (
select max(date)
from your_table
where type = a.type
)
对于Mysql 8,您可以使用窗口函数来获得所需的结果
select sum(amount)
from (select *, row_number() over (partition by type order by date desc) as seq
from your_table
) t
where seq = 1;