这与SQL order by 2 date columns(或proper way to sort sql columns,只针对1列)有很大的不同。在这里,我们将执行如下操作:
ORDER BY CASE WHEN date_1 > date_2
THEN date_2 ELSE date_1 END
仅供参考,为了简洁起见,我在本例中使用了YYY-MM-DD
,但我还需要它适用于TIMESTAMP
(YYYY-MM-DD HH:MI:SS
)
我有这张表:
| 标识符|姓名|日期_1|日期_2|日期_3|日期_4|日期_5|日期_6|日期_7|日期_8|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|- -|
| 一个|若翰|2008年8月11日|2008年8月12日|2009年8月11日|2009年8月21日|2009年9月11日|2017年8月11日|2017年9月12日|2017年9月30日|
| 2个|比尔|2008年9月12日|2008年9月12日|2008年10月12日|2011年9月12日|2008年9月13日|2022年5月20日|2022年5月21日|2022年5月22日|
| 三个|安迪|2008年10月13日|2008年10月13日|2008年10月14日|2008年10月15日|2008年11月1日|2008年11月2日|2008年11月3日|2008年11月4日|
| 四个|汉克|2008年11月14日|2008年11月15日|2008年11月16日|2008年11月17日|2008年12月31日|2009年1月1日|2009年1月2日|2009年1月2日|
| 五个|亚历克斯|2008年12月15日|2018年12月15日|2018年12月15日|2018年12月16日|2018年12月17日|2018年12月18日|2018年12月25日|2008年12月31日|
......但是,这些排列组合让我头疼,光是想想它们。
X1 E2 F1 X有更多的“通用解决方案”,但那是对X1 M3 N1 X,而不是对X1 M4 N1 X...
SELECT MAX(date_col)
FROM(
SELECT MAX(date_col1) AS date_col FROM some_table
UNION
SELECT MAX(date_col2) AS date_col FROM some_table
UNION
SELECT MAX(date_col3) AS date_col FROM some_table
...
)
有没有更像这样的东西,比如可以通过迭代一个循环来创建,比如PHP或Node.js?我需要一个 * 可伸缩 * 的解决方案。
- 我只需要列出每个
row
一次。 - 我想按我在
row
上列出的那些col
中日期最近的那个来对它们进行排序。
类似于:
SELECT * FROM some_table WHERE
(
GREATEST OF date_1
OR date_2
OR date_3
OR date_4
OR date_5
OR date_6
OR date_7
OR date_8
)
2条答案
按热度按时间ui7jx7zq1#
您可以使用
GREATEST
函数来实现它。DB小提琴:Try it here
| 最大日期|标识符|姓名|日期_1|日期_2|日期_3|日期_4|日期_5|日期_6|日期_7|日期_8|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|
| 2022年5月22日|2个|比尔|2008年9月12日|2008年9月12日|2008年10月12日|2011年9月12日|2008年9月13日|2022年5月20日|2022年5月21日|2022年5月22日|
| 2018年12月25日|五个|亚历克斯|2008年12月15日|2018年12月15日|2018年12月15日|2018年12月16日|2018年12月17日|2018年12月18日|2018年12月25日|2008年12月31日|
| 2017年9月30日|一个|若翰|2008年8月11日|2008年8月12日|2009年8月11日|2009年8月21日|2009年9月11日|2017年8月11日|2017年9月12日|2017年9月30日|
| 2009年1月2日|四个|汉克|2008年11月14日|2008年11月15日|2008年11月16日|2008年11月17日|2008年12月31日|2009年1月1日|2009年1月2日|2009年1月2日|
| 2008年11月4日|三个|安迪|2008年10月13日|2008年10月13日|2008年10月14日|2008年10月15日|2008年11月1日|2008年11月2日|2008年11月3日|2008年11月4日|
wd2eg0qa2#
在
NULL
值的情况下,GREATEST
可以丢弃ORDER
。基于
GREATEST
处理NULL
问题中的this Answer,根据已批准的答案,这将应用这些表: