SQL查询将多个列排序在一起

时间:2015-09-01 23:59:14

标签: mysql sql

我需要帮助为mySQL 5.5编写SQL查询。

我有一个包含startDate,startTime,endDate,endTime列的表。

简单的案例:

startDate   startTime   endDate     endTime
2015-08-01  11:00       0000-00-00  00:00
2015-08-01  12:00       0000-00-00  00:00
2015-08-06  22:00       2015-08-07  09:00
2015-08-07  23:00       2015-08-08  08:00
2015-08-07  12:00       0000-00-00  00:00

够容易。但现在我想添加endDate和endTime列。我希望将startDate和endDate列混合在一起,然后再添加startTime和endTime列。

一些简单的数据:

startDate   startTime   endDate     endTime
2015-08-07  21:00       2015-08-08  08:00
2015-08-07  23:00       0000-00-00  00:00
2015-08-06  22:00       2015-08-07  09:00
2015-08-01  12:00       0000-00-00  00:00
2015-08-01  11:00       0000-00-00  00:00

当排序时应返回:

2015-09-02   07:16:00   0000-00-00   00:00:00
2015-09-01   19:47:00   0000-00-00   00:00:00
2015-09-01   19:47:00   0000-00-00   00:00:00
2015-09-01   16:33:00   0000-00-00   00:00:00   Row A
2015-09-01   14:51:00   0000-00-00   00:00:00
2015-09-01   12:05:00   0000-00-00   00:00:00
2015-09-01   12:01:00   0000-00-00   00:00:00
2015-09-01   12:00:00   0000-00-00   00:00:00
2015-09-01   11:45:00   0000-00-00   00:00:00   Row B
2015-09-01   08:09:00   0000-00-00   00:00:00
2015-08-31   23:00:00   2015-09-01   11:00:00   Row C
2015-08-31   17:27:00   0000-00-00   00:00:00
2015-08-31   14:57:00   2015-09-01   14:57:00   Row D

第一个结果的endDate是最大的。第二个结果的startTime>第三个结果的结束时间。然后它只是根据startDate作为主要排序列进行排序,然后是startTime。

我查看了CASE声明,但无法正确使用。

我知道它不是最好的数据库设计。任何帮助都会很棒!

感谢。

修改

鉴于下面建议的SQL,这里有一些结果。

if(insert into table ... values ... if not exists) {
 // the real script
} else {
 // print some error description
}

我想要的是在行B下方排序行C.此外,行D应该排在行A的下方。

对不起,我不清楚。我想要startDate和startTime进行排序。但是如果一行有endDate和endTime,那么应该使用这些值(而不是startDate和startTime)对该行进行排序。

谢谢!

1 个答案:

答案 0 :(得分:0)

我想你想要:

order by greatest(addtime(endDate, endTime), addtime(startDate, startTime))
相关问题