【问题标题】:Multiple scenario in where clausewhere子句中的多种场景
【发布时间】:2021-03-01 20:10:33
【问题描述】:

我有以下数据:

Invoice | Status | StatusDate
1111111  BackOrd   null
1111111  Delivd    2020-01-01
2222222  BackOrd   null
3333333  Delivd    2020-02-29

在上面的发票中,11111 曾经在 BackOrd 上,现在已经交付,222222 目前在 BackOrd 上,33333 从未在 BackOrd 上并且已经交付。 22222&33333 很简单,但 11111 让我很烦恼,因为我只想显示当前的已交付状态。

我试过了

where case when StatusDate is null then 'BackOrd' else 'Delivd' end = Status

和各种迭代,但是我的 11111 示例将带回两行,这肯定是同时存在的。我觉得这不应该那么难,也许咖啡不够,但有些东西对我来说没有意义。

【问题讨论】:

  • 请发表你想要的结果?

标签: sql sql-server datetime where-clause greatest-n-per-group


【解决方案1】:

您想要每个invoice 的最新行,所以这是每组前 1 个问题。您可以使用窗口函数:

select *
from (
    select t.*,
        row_number() over(partition by invoice order by statusdate desc) rn
    from mytable t
) t
where rn = 1

这是因为 SQL Server 在使用降序排序时将 null 值放在最后。

【讨论】:

  • 谢谢。这对我有用。我也有同样的想法,但你的最后一句话是我无法解决的问题。
猜你喜欢
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多