首页 > 解决方案 > 如何在microsoft sql中根据日期返回一行

问题描述

我有一个内部部门,将来会转换帐号。我正在尝试构建一个存储过程,以根据生效日期仅返回两行之一。

这是数据构成

|ID | EffectiveDate | AccountNum |
|-- | ------------- | ---------- |
| 1 |  2021-01-01   |   350000   |
| 2 |  2021-09-01   |   950000   |

我知道这会返回所有数据

SELECT Id, EffectiveDate, AccountNum
        FROM Account

这仅返回第一行,从不返回第二行:

 SELECT Id, EffectiveDate, DeptNum
    FROM Account 
    WHERE EffectiveDate <= GETDATE()

如何根据今天的日期动态返回仅 1 行?

因此,如果生效日期小于今天的日期,则获取第一行。如果生效日期等于或大于今天的日期,则获取第二行。

标签: sqlsql-serverdate

解决方案


我想出了解决方案。鉴于 EffectiveDate 小于或等于当前日期,仅从两个可能的答案之一中选择前 1 个 deptnum,并且也使用 desc 的顺序。这可确保获得原始 EffectiveDate,因为未来的 EffectiveDate 尚未超过当前日期。当未来日期等于或早于当前日期时,将返回其值。

select TOP 1 deptnum
from Account
where EffectiveDate <= GETDATE()
order by EffectiveDate desc

推荐阅读