gpt4 book ai didi

php - 如何按优先级和日期排序?

转载 作者:行者123 更新时间:2023-11-29 14:32:12 25 4
gpt4 key购买 nike

我有以下 PostgreSQL 查询。

SELECT id FROM table WHERE user_id=$user_id ORDER BY
CASE
WHEN (date_completed_utc='0000-00-00 00:00:00') THEN 0 ELSE 1 END ASC

这是表格中内容的示例:

enter image description here

date_requested_utc 始终是过去的日期。

date_completed_utc 默认为“0000-00-00 00:00:00”,但后来更改为比 date_requested_utc 更新的日期。

我想要完成的是:

如果 date_completed_utc 是默认值,那么所有这些行都将排在所有其他行之上,但这些行按 date_requested_utc 降序排列。

但如果 date_completed_utc 不是默认值,则将这些行放在底部并按 date_completed_utc 降序排列这些行。

按 ID 生成的顺序应如下所示:

26, 20, 18, 17, 15, 16, 27, 28

我已经尝试了所有这些不同的 CASE 语句,但似乎无法正确处理。

最佳答案

您可以尝试使用双订单。

SELECT id 
FROM table
WHERE user_id=$user_id
ORDER BY
CASE WHEN (date_completed_utc='0000-00-00 00:00:00') THEN 0 ELSE 1 END,
date_requested_utc DESC

编辑

我看到了你的编辑问题。

您不必使用UNION ALL 组合两个查询,您可以直接用CASE WHEN 表达式查询一个。

号码排序

  1. 1/(EXTRACT(epoch from age(now(),date_requested_utc))/86400 date_requested_utc时间越近数字越大。
  2. 1/(EXTRACT(epoch from age(now(),date_completed_utc::timestamp))/86400::numeric date_completed_utc 时间越近时间越长数。

你可以试试这个。

SELECT id
SELECT id FROM table
WHERE user_id=$user_id
ORDER BY
(
CASE WHEN (date_completed_utc='0000-00-00 00:00:00')
THEN (EXTRACT(epoch from age(now(),'1970-01-01')) / 86400) + 1/(EXTRACT(epoch from age(now(),date_requested_utc)) / 86400)::numeric
ELSE 1/(EXTRACT(epoch from age(now(),date_completed_utc::timestamp)) / 86400)::numeric
END
)::numeric
DESC

sqlfiddle:http://sqlfiddle.com/#!17/f5f88a/28

关于php - 如何按优先级和日期排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111774/

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