我有一个代表分类帐簿的表格分类帐。
date | user_id | usd_value | eur_value
----------------------------+---------+-----------+-----------
2020-01-13 19:00:10.877+03 | 1 | 10 | 0
2020-01-13 19:10:15.4+03 | 1 | 30 | 0
2020-01-13 19:44:40.187+03 | 1 | 0 | 40
2020-01-13 19:45:06.935+03 | 2 | 15 | 0
2020-01-13 19:46:22.38+03 | 1 | 40 | 0
2020-01-13 19:50:43.176+03 | 2 | 0 | 15
2020-01-13 20:08:58.47+03 | 1 | 55 | 0
这张表很大,所以我想减少行数。
我正在尝试确定完成任务的最佳方法:如何修改原点(通过删除和更新行)表以获取以下行:
date | user_id | usd_value | eur_value
----------------------------+---------+-----------+-----------
2020-01-13 19:00:10.877+03 | 1 | 80 | 40
2020-01-13 19:45:06.935+03 | 2 | 15 | 15
2020-01-13 20:08:58.47+03 | 1 | 55 | 0
该表是查询的结果:
SELECT min(date) as date, user_id, sum(usd_value) as usd_value, sum(eur_value) as eur_value
from ledger
GROUP BY date_trunc('hour', date), user_id
ORDER BY date;
如果您没有任何引用该表的外键(即“传入”外键),您可以执行以下操作:
如果您只想在一年(或任何其他任意时间段)内执行此操作,则需要
truncate
用适当的delete
语句替换该部分,并将创建临时表的查询更改为仅所需的年份(或时间段)。例如挤压昨天的行: