【问题标题】:Order By checking several nulls通过检查多个空值来排序
【发布时间】:2020-12-09 02:03:01
【问题描述】:

我有一个包含以下时间戳列的表:

表格:提醒

已创建已确认已忽略

如果 AcknowledgedDate 和 IgnoredDate 都为空,则认为警报处于活动状态。如果 AcknowledgedDate 不为 null 但 IgnoredDate 为 null,则认为已确认。如果 IgnoredDate 不为 null,则视为忽略。

对于我的查询,我需要按 Active -> Acknowledged -> Ignored -> Created 的顺序排列警报。因此,我不关心任何实际日期,除了 CreatedOn,它用于比较两个都处于活动状态、已确认或已忽略的警报。

SELECT alrt FROM ALERT alrt ORDER BY ???

【问题讨论】:

  • 样本数据和期望结果将阐明您的数据结构。

标签: java sql hql


【解决方案1】:

如果我理解正确,你可以使用case逻辑:

order by (case when AcknowledgedDate is null and IgnoredDate then 1
               when IgnoredDate is null then 2
               else 3
          end)

【讨论】:

  • 创造出来的呢?
  • @MichaelBianconi 。 . .它似乎属于第三组。其他两个的条件中没有明确提及。但是,我希望它永远不会是NULL
【解决方案2】:

根据您的条件,这样做:

SELECT * FROM ALERT 
ORDER BY 
  AcknowledgedDate IS NULL AND IgnoredDate IS NULL DESC,
  AcknowledgedDate IS NOT NULL AND IgnoredDate IS NULL DESC,
  IgnoredDate IS NOT NULL DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多