SQL - 返回基于另一列独特的列值

SQL - 返回基于另一列独特的列值

问题描述:

我是新来的SQL需要一些帮助与基于VALUE_TYPE列提取最新的交易编号为客户代码SQL - 返回基于另一列独特的列值

我与这些值如下表:

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 

已经四处搜寻我发现下面的查询,但它只返回的最后交易时间为每个类型:

SELECT CUST_CODE,trans_no ,TRANS_TYPE,Time_of_trans从客户点t1 WHERE = t1.Time_of_trans

(SELECT MAX(Time_of_trans)来自客户的T 2,其中t2.trans_type = t1.trans_type )

是否有一个查询会返回我以后的内容? 感谢

使用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开始,到每个组的具有相同的客户代码和交易类型的记录。此编号将从最新的记录开始,由交易时间确定。然后,我们子查询只保留每个组的第一个这样的记录。

+0

谢谢,当运行查询时,我得到以下内容: Msg 102,Level 15,State 1,Line 35 'PARTITON'附近的语法不正确。 我在2014 SQL Express实例上测试这个。 –

+0

“PARTITION”的错字'PARTITON'。修复错字并且查询应该可以正常工作。 –

+0

谢谢!我没有发现错字。这工作完美。非常感谢! –