gpt4 book ai didi

mysql - 如何按日期对两个选择进行排序?

转载 作者:行者123 更新时间:2023-12-05 09:31:23 24 4
gpt4 key购买 nike

我有以下命令:

SELECT * 
FROM Posts P
WHERE P.ThreadId = 0
ORDER BY
(SELECT MAX(R.Time)
FROM Posts R
WHERE R.ThreadId = P.Id) DESC

这会选择所有线程并按它们最后回复的时间对它们进行排序。没有回复的线程总是在有回复的线程之后,并且顺序是随机的。我希望此命令还可以根据与其他线程混合的创建时间对线程进行排序,而无需回复。

我怎样才能做到这一点?(旁注:线程和回复使用同一个表“Post”。线程具有 ThreadId 0,而回复具有父帖子的 ThreadId。)

最佳答案

当子查询中没有元素满足条件(即没有回复)时,子查询将返回NULL,因此您必须提供一个默认值。该函数是 COALESCE , 它返回其参数的第一个非空值。

SELECT * 
FROM Posts P
WHERE P.ThreadId = 0
ORDER BY
COALESCE((SELECT MAX(R.Time)
FROM Posts R
WHERE R.ThreadId = P.Id), P.Time) DESC

所以 Coalesce( _thesubquery_, P.Time) 将返回子查询的结果,如果它不为空,或者 P.Time (即创建时间未回答的帖子)否则。

您还可以在 max 周围而不是整个子查询周围应用 COALESCE 函数。这将导致相同的结果

SELECT * 
FROM Posts P
WHERE P.ThreadId = 0
ORDER BY
(SELECT COALESCE(MAX(R.Time), P.Time)
FROM Posts R
WHERE R.ThreadId = P.Id) DESC

关于mysql - 如何按日期对两个选择进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68771160/

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