gpt4 book ai didi

mysql - 如何在一个sql查询中按desc对两个值进行排序?

转载 作者:行者123 更新时间:2023-11-29 16:15:30 25 4
gpt4 key购买 nike

我有广告表。在那里我有两个约会。您可以放置​​ adv 并添加选项以在列表中显示顶部。我创建了 top_list_end_date,我可以在该日期之前订购,这很简单。是另一个日期 up_date 如果您的广告位于第二页或底部,您可以更新日期,并且看起来新的广告应该位于列表顶部。

SELECT id, up_date, top_list_end_date 
FROM advertisements
ORDER BY top_list_end_date desc, up_date desc;

但是不起作用。 enter image description here我希望 adv id 202 作为结果中的第一个,因为 up_date 更高。我怎样才能在一个sql中做到这一点?

更新的答案谢谢大家的帮助。谢谢你,我找到了答案:

SELECT *
FROM (
SELECT 1 as own, id, up_date , top_list_end_date FROM advertisements WHERE top_list_end_date > now()
UNION ALL
SELECT 2 as own, id, up_date, top_list_end_date FROM advertisements WHERE top_list_end_date IS NULL

) a
order by own, up_date desc

结果是

enter image description here

我有两个组。首先是 top_list_end_date第二个没有那个日期。两个组都应仅按 up_date 排序但我想显示第一组 1 (top_list_end_date) 和第 2 组下面的所有其余内容。

如你所见,197 是第一个原因,因为 top_list_end_date 存在,并且 up_date 最高。与第二组相同,id 213更新最高。

:)再次感谢

最佳答案

您似乎想要coalesce():

SELECT id, up_date, top_list_end_date 
FROM advertisements
ORDER BY COALESCE(top_list_end_date, up_date) desc;

如果顶部列表日期为NULL,则使用最新日期。

注意:您可能还需要最大值。如果是这样:

SELECT id, up_date, top_list_end_date 
FROM advertisements
ORDER BY (CASE WHEN top_list_end_date < up_date OR top_list_end_date IS NULL
THEN up_date
ELSE top_list_end_date
END) desc;

关于mysql - 如何在一个sql查询中按desc对两个值进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54840041/

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