【问题标题】:SQL query to sort multiple columns togetherSQL查询将多列排序在一起
【发布时间】: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 可能有效,但我不确定我是否理解您真正想要实现的目标。

标签: mysql sql


【解决方案1】:

我想你想要:

order by greatest(addtime(endDate, endTime), addtime(startDate, startTime))

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 2021-12-15
    • 2021-07-10
    • 2018-06-27
    • 2015-08-12
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多