我需要帮助为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)对该行进行排序。
谢谢!
答案 0 :(得分:0)
我想你想要:
order by greatest(addtime(endDate, endTime), addtime(startDate, startTime))