我有广告表。在那儿我有两个约会。您可以将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;
但是不起作用。 我想要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
结果是
我有两个小组。首先是top_list_end_date 第二天没有那个日期。两组都应仅按up_date排序 但我想显示第一组第一(top_list_end_date),第二组以下的所有其他。您可以看到197首先是因为top_list_end_date存在并且up_date是最高。第二组ID 213的更新日期相同。
:)再次
答案 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