SQL Server:如何获取各s_id对应最新日期的tax_id
解决方案
首先,你的核心需求是获取每个s_id对应最新日期的tax_id,当前SQL的问题在于row_number()的排序方向错误,导致最新日期的记录被标记为较大的row_num值。以下是修正后的SQL语句:
SELECT s_id, tax_id, date_of FROM ( SELECT s_id, tax_id, date_of, -- 按s_id分区,日期降序排列,最新日期的记录row_num=1 ROW_NUMBER() OVER(PARTITION BY s_id ORDER BY date_of DESC) AS row_num FROM ( SELECT s_id, tax_id, date_of FROM t5 UNION SELECT s_id, tax_id, date_of FROM t6 ) AS s1 ) AS s2 WHERE row_num = 1;
关键修正点说明:
- 排序方向调整:将
ORDER BY date_of改为ORDER BY date_of DESC,这样每个s_id下最新的日期会排在第一位,对应的row_num为1。 - 筛选最新记录:外层添加
WHERE row_num = 1,直接过滤出每个s_id的最新条目,自然包含s_id=2的单条记录。 - UNION的选择:如果
t5和t6中不存在完全重复的(s_id, tax_id, date_of)记录,建议改用UNION ALL,避免不必要的去重操作,提升查询性能。
执行修正后的SQL后,你会得到如下结果:
1 345 2022-01-10 2 234 2022-01-02 3 458 2022-01-04 4 789 2022-01-07 5 222 2022-01-07
内容的提问来源于stack exchange,提问作者Rajat Arora
相关产品推荐
相关产品推荐

