sql - SQL Server:根据列中的日期返回最近的记录
问题描述
我遇到了一个非常基本的查询问题,我的临时表有一个主键和一个名为PropertyID1
.
我正在加入另一个有 3 列的表:
PropertyID, SalePrice, SaleDate
查询加入PropertyID1
和PropertyID
,我试图获得的是匹配的最新迭代,PropertyID
因为每个 ID 可以有 10+ 个匹配,我只需要最新的,该列SaleDate
用于选择所需的记录。
所以最初的查询是
CREATE TABLE ##RPP_CHECK
(
ID INT IDENTITY(1,1) PRIMARY KEY,
PropertyID1 VARCHAR(255) NULL
);
INSERT INTO ##IDCHECK
VALUES (41572498), (41484495), (41590235), (41611406)
SELECT
ID, ##IDCHECK.PropertyID1, PropertyID, SalePrice, SaleDate
FROM
##IDCHECK
LEFT JOIN
[ODS].[RS1] ON [ODS].[RS1].[PropertyID] = ##IDCHECK.PropertyID1
ORDER BY
ID
哪个返回
ID PropertyID1 PropertyID SalePrice SaleDate
--------------------------------------------------
1 41572498 41572498 0.0 01-01-2011
1 41572498 41572498 0.0 01-01-2012
1 41572498 41572498 1000 01-01-2018
2 41484495 41484495 1200 01-02-2018
3 41590235 41590235 2000 01-03-2018
3 41590235 41590235 0.0 01-01-1999
4 41611406 41611406 5000 01-10-2018
我需要它返回的是
ID PropertyID1 PropertyID SalePrice SaleDate
------------------------------------------------
1 41572498 41572498 1000 01-01-2018
2 41484495 41484495 1200 01-02-2018
3 41590235 41590235 2000 01-03-2018
4 41611406 41611406 5000 01-10-2018
我尝试查看此处发布的一些答案,但它们似乎不太合适,我很确定这是一个MAX(
问题或分组,但不是 100% 肯定对您可以提供的任何提示感到满意。
干杯
解决方案
一种选择使用ROW_NUMBER
:
SELECT ID, PropertyID1, PropertyID, SalePrice, SaleDate
FROM
(
SELECT ID, t1.PropertyID1, PropertyID, SalePrice, SaleDate,
ROW_NUMBER() OVER (PARTITION BY PropertyID ORDER BY SaleDate DESC) rn
FROM IDCHECK t1
LEFT JOIN [ODS].[RS1] t2
ON t2.PropertyID = t1.PropertyID1
) t
WHERE rn = 1;
推荐阅读
- django - 无法覆盖模型 save()
- php - 完全排除 Woocommerce 中运输的所有邮政信箱变体
- c++ - 错误:对“set_union”的调用没有匹配
- javascript - 为什么我的对象没有将数据填充到图表中?(包括演示)
- flutter - 在兄弟姐妹之间传递数据 - 颤振
- assembly - 从装配中另一段中存在的矩阵单元读取
- php - 如何从 gitlab-ci.yml 将环境导出到 PHP 文件中
- c++ - 如何为新项目使用仪器驱动程序和头文件/静态库
- ios - 使用自定义 UITableIView 时无法将具有标识符的单元格出列
- tfs - DevOps Server 2019.0.1(Azure DevOps 错误 - TF30063:您无权访问 tfs。)