首页 > 解决方案 > 在 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 中提出这个请求?

标签: sqlsqlite

解决方案


您可以使用:

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子句返回每个帐户/货币组合的最后一行(不清楚是否需要货币)。然后查询聚合这些值。


推荐阅读