如何在一个SQL查询中按desc的两个值排序?

时间:2019-02-23 09:11:58

标签: mysql sql laravel-5 eloquent

我有广告表。在那儿我有两个约会。您可以将adv和add选项放在列表顶部。我创建了top_list_end_date,我可以在该日期之前订购很简单。是另一个日期up_date,如果您的广告位于第二页或底部,则可以更新日期,看起来新鲜的adv应该位于列表的顶部。

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排序 但我想显示第一组第一(top_list_end_date),第二组以下的所有其他。

您可以看到197首先是因为top_list_end_date存在并且up_date是最高。第二组ID 213的更新日期相同。

:)再次

1 个答案:

答案 0 :(得分:0)

您似乎想要xmlstarlet edit

coalesce()

如果最上面的日期是SELECT id, up_date, top_list_end_date FROM advertisements ORDER BY COALESCE(top_list_end_date, up_date) desc; ,则使用更新日期。

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

NULL