【发布时间】:2015-09-01 23:59:14
【问题描述】:
我需要帮助为 mySQL 5.5 编写 SQL 查询。
我有一个包含 startDate、startTime、endDate、endTime 列的表。
简单案例:
SELECT * from Activity
ORDER BY startDate desc, startTime desc
很简单。但现在我想添加 endDate 和 endTime 列。我希望将 startDate 和 endDate 列混合在一起,然后再添加 startTime 和 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
排序后应该返回:
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
第一个结果的 endDate 最大。第二个结果的 startTime > 第三个结果的 endTime。然后它只是根据 startDate 作为主排序列然后 startTime 进行排序。
我查看了 CASE 语句,但无法正确理解。
我知道这不是最好的数据库设计。任何帮助都会很棒!
谢谢。
编辑
鉴于以下建议的 SQL,以下是一些结果。
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
我想要的是将 C 行排序在 B 行下方。D 行也应该在 A 行下方排序。
对不起,我不是很清楚。我希望对 startDate 和 startTime 进行 Desc 排序。但是,如果一行具有 endDate 和 endTime,则应使用这些值(而不是 startDate 和 startTime)对该行进行排序。
谢谢!
【问题讨论】:
-
零结束日期是什么意思?
-
Order by startDate desc, endDate desc, endTime desc, startTime asc 可能有效,但我不确定我是否理解您真正想要实现的目标。