sql - 如何选择特定详细信息的最新记录
问题描述
我在 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 日。
解决方案
这个问题可以通过行号差法很好的解决。这种方法相当健壮,并且可以容忍不同的客户记录岛都具有相同日期的情况。要了解其工作原理,请浏览演示;用语言来解释并不容易。
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;
演示
推荐阅读
- javascript - 使用商和提醒的二进制加法算法
- reactjs - 如何通过 id firebase 检索数据
- php - 多线程 PHP
- c# - 异步 Lambda 问题
- weblogic - JDeveloper 12c | 集成WebLogicServer | 构建默认域时出错
- django - Django Celery:TypeError:“NoneType”对象不可迭代
- excel - 如何比较两个单元格字符串以列出 str
- javascript - 如何序列化对象并将其转换回与原始对象相同的类
- abap - 删除存在于 2 个字符之间的特殊字符
- fits - 如何让 Source Extractor 分析图像?