SQL - 根据另一列

时间:2017-12-18 10:45:01

标签: sql-server

我是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   )

有一个查询会返回我之后的内容吗? 感谢

1 个答案:

答案 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开头的行号。此编号将从最新记录开始,由交易时间决定。然后,我们子查询只保留每个组中的第一个这样的记录。