MySQL 按两个日期列排序的查询过滤器
MySQL Query Filter Sequenced by two date columns
我想在 date_due
列和 date_paid
列中按正确的日期顺序排列我的 table。
我的 table 结构显示如下,按 due_date
列排序:
Period Due Date Paid Date
12/01/2014
02/05/2014
1 01/01/2015
2 02/01/2015
3 03/01/2015
4 04/01/2015
那么我只想这样做:
Period Due Date Paid Date
12/01/2014
1 01/01/2015
2 02/01/2015
02/05/2014
3 03/01/2015
4 04/01/2015
好吧,忘记我的愚蠢评论吧——它没有建设性。首先,我认为您的数据有误:我猜“02/05/2014”应该是“02/05/2015”。
问题是您必须聚合两列,然后才能进行排序。像我在评论中所说的那样使用 GREATEST
函数实际上是行不通的,因为它不是空保存。例如,您可以在此处使用 COALESCE
function。
总而言之,这可以通过 "adding a column" 来完成,比如
SELECT
*, Coalesce(`Due Date`, `Paid Date`) as bananas
FROM
table1
ORDER BY
bananas
或者直接在ORDER BY
子句中添加表达式:
SELECT
*
FROM
table1
ORDER BY
Coalesce(`Due Date`, `Paid Date`)
请查看此 fiddle 并自己尝试:http://sqlfiddle.com/#!2/21a84/1
我想在 date_due
列和 date_paid
列中按正确的日期顺序排列我的 table。
我的 table 结构显示如下,按 due_date
列排序:
Period Due Date Paid Date
12/01/2014
02/05/2014
1 01/01/2015
2 02/01/2015
3 03/01/2015
4 04/01/2015
那么我只想这样做:
Period Due Date Paid Date
12/01/2014
1 01/01/2015
2 02/01/2015
02/05/2014
3 03/01/2015
4 04/01/2015
好吧,忘记我的愚蠢评论吧——它没有建设性。首先,我认为您的数据有误:我猜“02/05/2014”应该是“02/05/2015”。
问题是您必须聚合两列,然后才能进行排序。像我在评论中所说的那样使用 GREATEST
函数实际上是行不通的,因为它不是空保存。例如,您可以在此处使用 COALESCE
function。
总而言之,这可以通过 "adding a column" 来完成,比如
SELECT *, Coalesce(`Due Date`, `Paid Date`) as bananas FROM table1 ORDER BY bananas
或者直接在ORDER BY
子句中添加表达式:
SELECT * FROM table1 ORDER BY Coalesce(`Due Date`, `Paid Date`)
请查看此 fiddle 并自己尝试:http://sqlfiddle.com/#!2/21a84/1