[英]SQL tricky order by
我正在尝试订购退货套装,但我很难让它正确订购。
我正在选择字段,每个字段都有date_updated
和date_added
。 添加字段时, date_updated
为null,直到有更新,然后分配当前日期。
我需要通过将最新的条目放在BOTTOM上来排序我的列表,并将最旧的条目放在顶部。 所以如果添加一个项目,它应该直接到底部。 有没有办法将所有日期字段连接在一起,然后按最旧到最新排序,忽略更新或添加?
这可能听起来有些令人困惑,但我已经尝试了ORDER BY date_added DESC, date_updated ASC
以及类似的东西的多种组合,但它没有做我需要做的事情。 我得到了date_added
排序的顶部部分,然后在那之下是date_updated
的单独排序......
任何输入在这里都会非常有用......
您可以尝试CASE语句
SELECT
firstname,
lastname,
date_added,
date_updated,
CASE date_updated IS NULL
THEN date_added
ELSE date_updated
END CASE AS order_date
FROM mytable
ORDER BY order_date DESC
这样做是检查date_updated
是否为null,然后将date_added
的值放入新列。 如果没有,则将date_updated
置于其中。 新列称为order_date
,用于排序。
您还可以在ORDER BY子句中添加CASE语句,但这可能会降低查询速度,因为它必须在索引与构造数据时进行连接。 虽然没有定论,但如果在SELECT与ORDER BY中使用CASE,我发现性能略有提升。
按Order By
使用CASE
。
ORDER BY CASE WHEN date_updated IS NULL
THEN 0
ELSE 1
END DESC, date_added DESC
Order by IsNull(DateUpdated,DateAdded)
会是一种方式
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.