[英]SQL Server - Distinct case in one column but last record in second column
我有一个要求(简单,但是找不到简单的解决方案)来获取手机号码和唯一的交易ID(最新的交易会很好,但是任何交易ID都可以)
样本数据
Seq. Mobile No. Transaction No.
1 1234567890 ABC1234
2 2345678901 ABC2392
3 2345678901 ABC2782
我只是想找到手机号码2345678901和任何一项交易,但是最新的会很好。
产量
Seq. Mobile No. Transaction No.
1 1234567890 ABC1234
2 2345678901 ABC2782
我知道DISTINCT根本行不通,所以不确定什么是获得结果的最佳方法。
我找到了一种通过子查询执行此操作的方法,但我想在单个查询中执行此操作以获得更好的性能。
请帮助!!
您可以为此使用ROW_NUMBER
:
SELECT Seq, MobileNo, TransactionNo
FROM (
SELECT Seq, MobileNo, TransactionNo,
ROW_NUMBER() OVER (PARTITION BY MobileNo ORDER BY Seq DESC) AS rn
FROM mytable) AS t
WHERE t.rn = 1
上面的查询将为每个MobileNo
准确选择一条记录:该记录具有最大的Seq
值。
您可以使用group by
。
select [Seq], [Mobile No], [Transaction No] from yourtable t1
inner join
(select [Mobile No], max([Transaction No]) as T_no from yourtable
group by [Mobile No]) t2
on t1.[Mobile No]=t2.[Mobile No] and t1.[Transaction No]=t2.T_no
右查询为您提供每个[Mobile No]
最新[Transaction No]
,而左查询仅用于查找匹配的[Seq]
。
CREATE TABLE #Transaction
(
Seq VARCHAR(12),
MobileNo VARCHAR(12),
TransactionNo VARCHAR(12)
)
INSERT INTO #Transaction VALUES
(1,'1234567890','ABC1234')
,(2,'2345678901','ABC2392')
,(3,'2345678901','ABC2782')
SELECT DT.Seq,DT.MobileNo,DT.TransactionNo FROM
(SELECT Seq,
MobileNo,
TransactionNo,
ROW_NUMBER() OVER(PARTITION BY MobileNo ORDER BY Seq) AS Rn
FROM
#Transaction) DT
WHERE DT.Rn = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.