查询以查找将来日期最近的行

时间:2019-05-02 12:39:11

标签: sql sql-server tsql

我正在尝试显示基于最小日期值和今天的日期的结果集,但似乎无法使其正常工作。本质上,这是一个对日期敏感的价格表。

示例数据

ID    Title    Value    ExpireDate
1     Fred      10       2019-03-01
2     Barney    15       2019-03-01
3     Fred2     20       2019-06-01
4     Barney2   25       2019-06-01
5     Fred3     30       2019-07-01
6     Barney3   55       2019-07-01

必填结果:
根据最短日期显示记录> GetDate()

3     Fred2     20       2019-06-01
4     Barney2   25       2019-06-01

任何帮助都会很棒-谢谢。

1 个答案:

答案 0 :(得分:4)

使用where子句过滤所有将来的行,并使用row_number()查找每个组的第一行:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Title ORDER BY ExpireDate) AS rn
    FROM t
    WHERE ExpireDate >= CAST(CURRENT_TIMESTAMP AS DATE)
) AS x
WHERE rn = 1

根据您修改后的问题,您可以执行以下操作:

SELECT TOP 1 WITH TIES *
FROM t
WHERE ExpireDate >= CAST(CURRENT_TIMESTAMP AS DATE)
ORDER BY ExpireDate