0

我有一张桌子,我需要在其中处理两列的排序。第一个包含从 1 到 7 的天数。这是要订购的第一列。然后我需要订购另一列,但这次我需要从 06:00:00 开始订购。

    SELECT * FROM stream 
ORDER BY day,start="06";

我试过这个,但我想我做错了什么。

这是我的查询结果的一部分:

|  ID | DAY |                          START |                            END | PROGRAM_ID |
|-----|-----|--------------------------------|--------------------------------|------------|
|   1 |   1 | January, 01 1970 06:00:00+0000 | January, 01 1970 07:00:00+0000 |          1 |
|  13 |   1 | January, 01 1970 18:00:00+0000 | January, 01 1970 19:00:00+0000 |          5 |
|  14 |   1 | January, 01 1970 19:00:00+0000 | January, 01 1970 20:00:00+0000 |          6 |
|  15 |   1 | January, 01 1970 20:00:00+0000 | January, 01 1970 21:00:00+0000 |          6 |
|  16 |   1 | January, 01 1970 21:00:00+0000 | January, 01 1970 22:00:00+0000 |          6 |
|  17 |   1 | January, 01 1970 22:00:00+0000 | January, 01 1970 23:00:00+0000 |          7 |
|  18 |   1 | January, 01 1970 23:00:00+0000 | January, 01 1970 00:00:00+0000 |          7 |
|  19 |   1 | January, 01 1970 00:00:00+0000 | January, 01 1970 01:00:00+0000 |          7 |
| 163 |   1 | January, 01 1970 10:24:00+0000 | January, 01 1970 10:45:00+0000 |          6 |
|  39 |   1 | January, 01 1970 01:00:00+0000 | January, 01 1970 06:00:00+0000 |          8 |
|  12 |   1 | January, 01 1970 17:00:00+0000 | January, 01 1970 18:00:00+0000 |          5 |
|  11 |   1 | January, 01 1970 16:00:00+0000 | January, 01 1970 17:00:00+0000 |          1 |
|   2 |   1 | January, 01 1970 07:00:00+0000 | January, 01 1970 08:00:00+0000 |          1 |
|   3 |   1 | January, 01 1970 08:00:00+0000 | January, 01 1970 09:00:00+0000 |          2 |
|   4 |   1 | January, 01 1970 09:00:00+0000 | January, 01 1970 10:00:00+0000 |          2 |
|   5 |   1 | January, 01 1970 10:00:00+0000 | January, 01 1970 11:00:00+0000 |          3 |
|   6 |   1 | January, 01 1970 11:00:00+0000 | January, 01 1970 12:00:00+0000 |          3 |
|   7 |   1 | January, 01 1970 12:00:00+0000 | January, 01 1970 13:00:00+0000 |          3 |
|   8 |   1 | January, 01 1970 13:00:00+0000 | January, 01 1970 14:00:00+0000 |          4 |
|   9 |   1 | January, 01 1970 14:00:00+0000 | January, 01 1970 15:00:00+0000 |          4 |
|  10 |   1 | January, 01 1970 15:00:00+0000 | January, 01 1970 16:00:00+0000 |          1 |
|  32 |   2 | January, 01 1970 18:00:00+0000 | January, 01 1970 19:00:00+0000 |          5 |
|  33 |   2 | January, 01 1970 19:00:00+0000 | January, 01 1970 20:00:00+0000 |          6 |

实际上在我自己的 mysql 上,我没有得到“1970 年 1 月 1 日”部分。但这是 sqlfiddle 的输出。无论如何,我认为这对解决方案并不重要。

这是 sqlfiddle 链接:http ://sqlfiddle.com/#!2/d57d7d/2/0

4

3 回答 3

4

如果在 clasue 中小于 6,您可以将 25 添加到小时ORDER BY,看看:

SELECT * FROM stream 
ORDER BY day, CASE
                WHEN hour(start) < 6 THEN hour(start) + 25 
                ELSE hour(start)
              END

这样, 之前的所有值06:00:00都将在末尾。

SQLFiddle:http ://sqlfiddle.com/#!2/d57d7d/33

于 2013-11-01T17:51:04.450 回答
1

您可以对您的订单查询进行 CASE,看看这篇文章!

Order BY CASE 1 THEN ORDER BY CASE 2 ...

按案例排序

于 2013-11-01T17:34:10.770 回答
0

检查这个。如果您想按任意两列排序,请尝试使用以下选项。

ORDER BY Column1,Column2;

http://sqlfiddle.com/#!2/d57d7d/11
于 2013-11-01T17:36:24.997 回答