如果我有这样的查询
$line_item_status_query =
"SELECT p.description,
p.production_order_id,
l.start_user,
p.sequence,
l.start :: date,
l.stop :: date,
pr.id,
pr.process,
pr.process_sequence,
pr.caption_in_process,
pr.caption_closed,
pr.show_to_customer
FROM production_order_processes p
LEFT JOIN production_order_process_log l
ON l.production_order_process_id = p.id
LEFT JOIN processes pr
ON pr.process_sequence = p.sequence
WHERE l.production_order_id = (SELECT id
FROM production_orders
WHERE
sales_order_line_id = '".$sales_order_line_id."')
ORDER BY p.sequence";
且l.start :: date
和/或l.stop :: date
可能为空或空,我如何执行ORDER BY
以便我可以将返回的结果以升序(或降序)为基础哪个日期更近?
我想用p.sequence用一些条件逻辑替换顺序,但我不在我的深处。
感谢您的帮助!
答案 0 :(得分:4)
使用案例陈述
ORDER BY
CASE
WHEN l.start>l.stop THEN l.start
ELSE COALESCE(l.stop, l.start)
END
编辑:这是一个通用的SQL解决方案,但如果您的平台支持它,那么Frank Heikens的“最好的答案”就是整洁。
答案 1 :(得分:3)
使用GREATEST():
ORDER BY
GREATEST(l.start, l.stop)
答案 2 :(得分:0)
我不确定我是否理解您的短语基于最近的日期。但是,您可以按顺序使用case
:
ORDER BY (case when l.start is null and l.stop is null then null
when l.start is null then l.stop
when l.stop is null then l.start
when l.start > l.stop then l.start
else l.stop
end)
这将用于排序:
l.start
如果l.stop
为空l.stop
如果l.start
为空l.stop
和l.start
如果两者都不是null
null
如果两者都是null