繁体   English   中英

SQL Server-区分大小写在第一列中,但最后一条记录在第二列中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM