gpt4 book ai didi

sql - 如何对每个账户的最后一笔交易进行 SQL 查询?

转载 作者:行者123 更新时间:2023-12-03 22:52:59 25 4
gpt4 key购买 nike

假设我有一个表“事务”,其中包含“acct_id”、“trans_date”和“trans_type”列,我想过滤这个表,以便我只有每个帐户的最后一笔交易。显然我可以做类似的事情

SELECT acct_id, max(trans_date) as trans_date  
FROM transactions GROUP BY acct_id;

但后来我失去了我的 trans_type。然后,我可以使用我的日期列表和帐户 ID 进行第二次 SQL 调用,并取回我的 trans_type,但这感觉非常笨拙,因为这意味着要么将数据来回发送到 sql 服务器,要么意味着创建一个临时表。

有没有办法通过单个查询来做到这一点,希望是一种适用于 mysql、postgres、sql-server 和 oracle 的通用方法。

最佳答案

这是 greatest-n-per-group 的示例询问。这个问题每周在 StackOverflow 上出现几次。除了其他人给出的子查询解决方案之外,这是我的首选解决方案,它不使用子查询,GROUP BY ,或 CTE:

SELECT t1.*
FROM transactions t1
LEFT OUTER JOIN transactions t2
ON (t1.acct_id = t2.acct_id AND t1.trans_date < t2.trans_date)
WHERE t2.acct_id IS NULL;

换句话说,返回一行,使得不存在具有相同 acct_id 的其他行。和更大的 trans_date .

此解决方案假定 trans_date对于给定的帐户是唯一的,否则可能会发生关联,并且查询将返回所有关联的行。但这也适用于其他人给出的所有解决方案。

我更喜欢这个解决方案,因为我经常使用 MySQL,它不会优化 GROUP BY很好。因此,这种外连接解决方​​案通常被证明对性能更好。

关于sql - 如何对每个账户的最后一笔交易进行 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1505549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com