我是sql的新手,需要一些帮助,根据value_type列提取客户代码的最新交易号
我有下表这些值:
cust_code Trans_no trans_Type Time_of_trans
RTST RTST#289 128 2017-12-13 13:23:16.000
RTST RTST#290 8 2017-12-13 13:18:52.000
RTST RTST#291 4 2017-12-13 13:12:37.000
NBST NBST#789 128 2017-12-13 13:12:36.000
RTST RTST#293 4 2017-12-12 12:27:12.000
DIFD DIFD#2 4 2017-12-12 12:27:12.000
RTST RTST#295 4 2017-12-12 12:26:15.000
NBST NBST#784 4 2017-12-12 12:26:15.000
RTST RTST#297 4 2017-12-12 11:13:29.000
我想运行一个查询,只显示所有客户代码的所有类型的最新trans_no。
我希望输出显示如下内容:
cust_code Trans_no trans_Type Time_of_trans
RTST RTST#289 128 2017-12-13 13:23:16.000
RTST RTST#290 8 2017-12-13 13:18:52.000
RTST RTST#291 4 2017-12-13 13:12:37.000
NBST NBST#789 128 2017-12-13 13:12:36.000
NBST NBST#784 4 2017-12-12 12:26:15.000
DIFD DIFD#7 4 2017-12-12 12:27:12.000
DIFD DIFD#5 8 2017-12-12 09:57:44.000
DIFD DIFD#4 128 2017-12-12 09:53:44.000
搜索过后,我发现了以下查询,但它只返回每种类型的最后一次交易时间:
从客户t1选择cust_code,trans_no,trans_Type,Time_of_trans 在哪里t1.Time_of_trans =
(SELECT max(Time_of_trans)FROM Customers t2 WHERE t2.trans_type = t1.trans_type )
有一个查询会返回我之后的内容吗? 感谢
答案 0 :(得分:2)
使用ROW_NUMBER
:
SELECT cust_code, Trans_no, trans_Type, Time_of_trans
FROM
(
SELECT cust_code, Trans_no, trans_Type, Time_of_trans,
ROW_NUMBER() OVER (PARTITION BY cust_code, trans_Type ORDER BY Time_of_trans DESC) rn
FROM yourTable
) t
WHERE t.rn = 1;
上述查询将为具有相同客户代码和事务类型的每组记录分配一个以1开头的行号。此编号将从最新记录开始,由交易时间决定。然后,我们子查询只保留每个组中的第一个这样的记录。