sql - 在 SQLite 中对最后(按日期)值进行分组和求和
问题描述
例如,有一个数据表:
-------------------------------------------------
| date | account | currency | sum |
-------------------------------------------------
| 2020-03-02 | EUR account 1 | EUR | 12000 |
| 2020-03-01 | EUR account 2 | EUR | 3000 |
| 2020-03-06 | USD account 1 | USD | 1234 |
| 2020-01-02 | GBP account 1 | GBP | 6800 |
| 2019-11-21 | EUR account 1 | EUR | 3584 |
| 2019-06-15 | EUR account 1 | EUR | 86874 |
| 2018-02-05 | USD account 1 | USD | 12121 |
对数据的 SQL 请求必须选择最后一个值并按货币分组。结果表应该有下一个视图:
--------------------
| currency | sum |
--------------------
| EUR | 15000 |
| USD | 1234 |
| GBP | 6800 |
请建议,如何正确地在 SQLite 中提出这个请求?
解决方案
您可以使用:
select t.currency, sum(t.sum)
from t
where strftime('%Y', t.date) = (select strftime('%Y', max(t2.date))
from t t2
where t2.account = t.account and t2.currency = t.currency
)
group by t.currency;
该where
子句返回每个帐户/货币组合的最后一行(不清楚是否需要货币)。然后查询聚合这些值。
推荐阅读
- php - PHP嵌套数组:内爆每个叶子的所有树键会产生一个多维数组而不是一维关联数组
- c# - 如何对 DataGridView 中添加的每个列求和?
- blazor - 什么时候认为参数不同?
- javascript - lis 的值并将它们转换回整数
- terminal - 使用终端过滤日志文件中的多个单词
- python - ModuleNotFoundError: No module named 'utils': 如何更改 Import 查看的父目录
- apache-flink - 在apache flink中加入两个数据集后如何保留排序顺序?
- php - 如何使用此值数组创建 foreach
- postgresql - 无法在 Windows CMD 中使用 pg_ctl?
- javascript - findByType 函数找不到属性?