gpt4 book ai didi

sql - SQL 中的自定义排序

转载 作者:行者123 更新时间:2023-12-01 23:53:02 36 4
gpt4 key购买 nike

我正在尝试使用 CASE 语句在我的 SQL 查询的 ORDER BY 子句中实现“自定义”排序,但它给了我一些时髦的排序

到目前为止,这是我的 ORDER BY 子句:

编辑以反射(reflect)更新:

ORDER BY 
CASE WHEN
CheckInStatus <> 'Cancelled' AND ArrivalTime is null AND GETDATE() > DATEADD(mi,30, CAST(StartDateTime AS DATETIME))THEN 1
WHEN
CheckInStatus <> 'Cancelled' AND ArrivalTime is null AND GETDATE() <= DATEADD(mi,30, CAST(StartDateTime AS DATETIME)) THEN 2
WHEN ArrivalTime is not null THEN 3
WHEN CheckInStatus='Cancelled' THEN 4
ELSE 5
END,
StartDateTime, ScanTechName

我想做的是按如下顺序查询:

还没有到达(并且没有取消约会)并且当前时间比开始时间晚了 30 分钟以上的人 - 这些人应该是第一个

尚未到达(且约会未取消)且当前时间小于或等于开始时间后 30 分钟的人 - 这些人出现在第二位

接下来是签到的各位

之后是取消的约会

最后是其他一切

所有内容都将按 StartTime 和 Name 排序

问题似乎出现在 2 和 3 上。这些人似乎混在一起,我认为这可能与我的 AND 有关,但我不确定如何解决。

下面是我在结果中得到的错误 - 我在 ORDER BY 中包含了 CASE 以直观地看到问题

编辑以包含结果:

Arrival Time            | CheckIn Status | StartDateTime           | OrderStatus
----------------------------------------------------------------------------------
2014-08-15 08:00:07.123 | Arrived | 2014-08-15 07:15:00.000 | 3
----------------------------------------------------------------------------------
2014-08-15 07:47:48.643 | Arrived | 2014-08-15 07:30:00.000 | 2

所以发生了一些事情

  1. 由于我当前的 GETDATE() 是 2014 年 8 月 28 日 - 上面不应有 2 状态。因为它不小于或等于 StartDate 之后的 30 分钟
  2. 因为这本身就是错误的,它可能会导致第二个问题 - 因为它被标记为 2,所以它应该出现在 3 之前而不是之后。

最佳答案

您的这部分情况似乎是导致您出现问题的原因:

CAST(StartDateTime AS DATETIME) > DATEADD(mi,30, CAST(StartDateTime AS DATETIME))

[StartDateTime] 永远不会大于同一日期加上 30 分钟!对于你的第二个条件,同样的评论。

如果这不能解决您的问题,您能否提供有关此查询的结果的更多信息?

关于sql - SQL 中的自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25552751/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com