mysql - 如何在一个 sql 查询中按两个值作为 desc 排序?
问题描述
我有广告表。在那里我有两个约会。您可以放置 adv 和 add 选项以显示在列表的顶部。我创建了 top_list_end_date,我可以在那个日期之前订购很简单。是另一个日期更新日期,如果您的广告在第二页或底部,您可以更新日期并且看起来新鲜的广告应该在列表的顶部。
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 排序,但我想显示第 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;
推荐阅读
- javascript - React Konva 中正多边形的捕捉问题
- c# - 从动作中检索朴素的动作名称
- r - 包功能中的单元测试和检查:我们是否都进行检查?
- mysql - 从 MySQL 迁移到 SQL Server,如何实现触发器
- c# - JObject 解析返回额外的花括号
- flutter - 完成迭代循环后地图为空
- javascript - 如何在不更改原始行的情况下修改“克隆”行
- ios - 快速注销时未捕获 AppAuth 缓存问题/通用链接
- asp.net-mvc - 如何跨层移动数据(MVC5 + EF6 + DDD)?
- scaling - Citrix 鼠标单击关闭 / 不工作 高 DPI / 缩放 / 多个显示器