如果我有一组交易,并且想要挑选出最大或最新交易的完整交易,我如何识别并提取该交易。例如给定一个像
这样的表身份证 | 商品ID | 数量 | 价值 | 翻译日期 | 客户ID |
---|---|---|---|---|---|
11254 | a123 | 10 | 123.60 | 2021年10月1日 | FH12AH |
11236 | a124 | 1 | 1123.60 | 2021年1月15日 | FH12AH |
1123 | a129 | 9 | 23.10 | 2021年1月15日 | FH12AH |
11237 | a125 | 5 | 213.10 | 2021年1月15日 | FH12AH |
2134 | a123 | 3 | 37.08 | 2021年1月15日 | QB876G |
3412 | b987 | 31 | 123.60 | 2021年1月23日 | QB876G |
4321 | jp34 | 5 | 123.60 | 2021年1月30日 | JH8765 |
4322 | a123 | 51 | 1123.60 | 2021/02/01 | TT6548 |
我如何提取整个交易
每个客户的最高价值交易
每种产品的最高价值交易
我可以编写一个查询来提取每个客户最高交易价值的日期,如下所示:
Select CustID, max(value) as highest_value
from Table
Group By CustID
但是要提取整个事务,我需要将其作为子查询连接到原始表,即
select t.* from Table t
Join (Select CustID, max(value) as highest_value
from Table
Group By CustID) sq
on t.CustID = sq.CustID
and t.value = sq.highest_value
是否有更简单的结构来完成相同的工作?
SELECT X.* FROM
(
SELECT T.*,
ROW_NUMBER()OVER(PARTITION BY T.CustID ORDER BY T.VALUE DESC)AS XCOL
FROM YOUR_TABLE AS T
) X WHERE X.XCOL=1
每个客户的最高价值交易