如何找到没有未来日期的最大日期

Abd*_*mun 2 sql t-sql database sql-server

我正在尝试列出表中每个代码的最新数量(MAX EffectiveDate时间避免Futuristic EffectiveDate)

Code     Quantity EffectiveDate
1        2        1-Mar-2018
1        3        1-Apr-2018
1        3        1-May-2018
1        3        1-June-2018
2        5        1-Mar-2018
2        6        1-Apr-2018
3        7        1-Feb-2018
3        8        1-Mar-2018
3        5        1-Apr-2018
Run Code Online (Sandbox Code Playgroud)

期望的输出应该是:

Code     Quantity EffectiveDate
1        3        1-May-2018
2        6        1-Apr-2018
3        5        1-Apr-2018
Run Code Online (Sandbox Code Playgroud)

我尝试使用MAX BY(DATE)的GROUP BY解决方案, 但它显示了未来数据.

Luk*_*zda 6

要获得完整的行,您可以使用:

SELECT TOP 1 WITH TIES *
FROM table
WHERE EffectiveDate <= GETDATE()
ORDER BY ROW_NUMBER() OVER(PARTITION BY code ORDER BY EffectiveDate DESC);
Run Code Online (Sandbox Code Playgroud)

DBFiddle演示


编辑:

如果一个代码组中的关系是可能的,那么您可以使用RANK:

SELECT TOP 1 WITH TIES *
FROM tab
WHERE EffectiveDate <= GETDATE()
ORDER BY RANK() OVER(PARTITION BY code ORDER BY EffectiveDate DESC);
Run Code Online (Sandbox Code Playgroud)

DBFiddle演示2

  • @Shnugo我也喜欢它.特别是当与'RANK`结合而不是'ROW_NUMBER`时.然后我得到组(PARTITION BY)和所有组的联系.**[使用RANK进行演示](https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=c1712a8ee372a7ad99d8e194d6a84b96)** (2认同)