首页 > 解决方案 > 查找最近日期 SQL 的记录

问题描述

我有一个dbo.X包含DateTime列的表lastUpdated和一个可能有数百条记录的代码产品列CodeProd,其中 CodeProd 重复,因为该表用作“股票历史”

我的存储过程有参数@Date,我想获取CodeProd最接近该日期的所有内容,例如,如果我有:

+----------+--------------+--------+
| CODEPROD | lastUpdated  | STATUS |
+----------+--------------+--------+
|       10 |   2-1-2019   |   C1   |
|       10 |   1-1-2019   |   C2   |
|       10 |   31-12-2019 |   C1   |
|       11 |   31-12-2018 |   C1   |
|       11 |   30-12-2018 |   C1   |
|       12 |   30-8-2018  |   C3   |
+----------+--------------+--------+

@Date= '1-1-2019'

我想要:

+----+--------------+------+
| 10 |    1-1-2019  |   C2 |
| 11 |   31-12-2018 |   C1 |
| 12 |   30-8-2018  |   C3 |
+----+--------------+------+

如何找到它?

标签: sql-servertsqlsql-server-2012

解决方案


您可以使用TOP(1) WITH TIES为每行获取最近日期的一行,CODEPROD 该日期应小于提供的日期。

试试下面的代码。

SELECT TOP(1) WITH TIES * 
FROM   [YourTableName] 
WHERE  lastupdated <= @date 
ORDER  BY Row_number() 
            OVER ( 
              partition BY [CODEPROD] 
              ORDER BY lastupdated DESC); 

推荐阅读