Redash环境下计算指定用户A&B最后一笔交易金额之和的方法咨询
解决指定用户最后一笔交易金额求和的问题
对应示例数据的目标说明
假设你要计算用户123和456的最后一笔交易金额之和:
- 用户123最后一笔是2022/11/02的9
- 用户456最后一笔是2022/11/04的6
- 最终求和结果为15
方法一:窗口函数实现(推荐,逻辑清晰)
利用ROW_NUMBER()窗口函数给每个用户的交易按日期倒序编号,取编号为1的记录就是最新交易,再筛选指定用户后求和:
SELECT SUM(Amount) AS total_last_transaction FROM ( SELECT `user id`, Amount, ROW_NUMBER() OVER (PARTITION BY `user id` ORDER BY date DESC) AS rn FROM your_table_name WHERE `user id` IN (123, 456) -- 替换为你要指定的用户ID ) AS ranked_transactions WHERE rn = 1;
- 内层子查询:按用户分组,每组内交易按日期从新到旧编号,最新交易的
rn值为1 - 外层查询:仅保留每个用户的最新交易记录,对金额求和
方法二:关联子查询实现
先找出指定用户的最新交易日期,再关联原表匹配对应金额后求和:
SELECT SUM(t1.Amount) AS total_last_transaction FROM your_table_name t1 INNER JOIN ( SELECT `user id`, MAX(date) AS latest_date FROM your_table_name WHERE `user id` IN (123, 456) GROUP BY `user id` ) t2 ON t1.`user id` = t2.`user id` AND t1.date = t2.latest_date;
- 子查询
t2:筛选指定用户,计算每个用户的最新交易日期 - 关联原表
t1:匹配用户ID和最新日期,拿到对应交易金额后求和
Redash使用注意事项
- 将
your_table_name替换为你实际的数据表名称 - 如果日期字段是非标准格式,需先转换为日期类型(比如
STR_TO_DATE(date, '%Y/%m/%d')),确保排序逻辑正确 - 将上述SQL粘贴到Redash查询编辑器,选择对应数据源后直接运行即可
内容的提问来源于stack exchange,提问作者Nanosa
相关产品推荐
相关产品推荐

