首页 > 解决方案 > 如何选择特定详细信息的最新记录

问题描述

我在 SQL Server 表中有如下数据,

我有如下数据,

id  Cust_id   Name  Qty    Trans_date
_______________________________________

1   101     Srini   10    01-May-2018
2   101     Srini   20    01-May-2018
3   102     Arun    100   01-May-2018
4   102     Arun    200   01-May-2018
5   101     Srini   10    02-May-2018
6   101     Srini   30    02-May-2018

我想要下面的结果集,

5   101     Srini   10    02-May-2018
6   101     Srini   30    02-May-2018
3   102     Arun    100   01-May-2018
4   102     Arun    200   01-May-2018

我需要查询以获取最新的跨日期详细信息。Srini 的最新记录是 5 月 2 日,Arun 的最新记录是 5 月 1 日。

标签: sqlsql-server

解决方案


这个问题可以通过行号差法很好的解决。这种方法相当健壮,并且可以容忍不同的客户记录岛都具有相同日期的情况。要了解其工作原理,请浏览演示;用语言来解释并不容易。

cte1 AS (
    SELECT *,
        ROW_NUMBER() OVER (ORDER BY id) -
            ROW_NUMBER() OVER (PARTITION BY Cust_id ORDER BY id) diff
    FROM yourTable
),
cte2 AS (
    SELECT *,
        DENSE_RANK() OVER (PARTITION BY Cust_id ORDER BY diff DESC) rank
    FROM cte1
)

SELECT id, Cust_id, Name, Qty, Trans_date
FROM cte2
WHERE rank = 1;

演示


推荐阅读