mysql没有正确反向排序datetime字段

时间:2011-02-23 23:34:04

标签: mysql datetime sorting sql-order-by

我正在尝试按降序排序datetime字段。按天排序就好了。但是,时间部分是随机的。它完美地按升序排序 示例查询:
SELECT * FROM pcvisit WHERE page_id='0005e1ca1784383bf6bf032f33dc6e27' ORDER BY dtime DESC
结果:

4adbc6b1cab4f14e7c9f2e308eb0944e | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-23 16:08:35 | 1
733ab6507fbdab0e71f357f2f0ff6067 | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-23 07:24:12 | 1
a5f9c9810e9648d2dbe4dec0e785216c | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-23 05:26:59 | 1
981e24b4dd257f44a7a41dbdfe4def54 | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-22 09:07:12 | 3
67906b350d59e97d7f56b7ceb254857e | 0005e1ca1784383bf6bf032f33dc6e27 | 2011-02-22 06:55:44 | 1

我也尝试过:
SELECT * FROM pcvisit WHERE page_id='0005e1ca1784383bf6bf032f33dc6e27' ORDER BY dtime DESC, TIME(dtime) DESC
尽我所能,不必将其分成2个字段。

2 个答案:

答案 0 :(得分:3)

第二个选择中的顺序<{1>}上的主要是,时间仅在主要字段相等时影响它。换句话说,

dtime

实际上只会使用order by col1, col2 来排序具有相同col2值的行。

这就是多列排序的工作方式。

如果你希望在降序日期内有类似升序的时间,那将会有点棘手,但你只需要打破日期和时间,例如:

col1

在这种情况下,我真的考虑将其分成两个单独的列以提高效率。您不希望在order by date(dtime) desc, time(dtime) asc 子句中执行每行函数 - 最好为它们分别创建索引。

但是,我认为这不是这种情况。由于order by是一个日期/时间列,因此您已经已经对日期和时间进行排序,因此我不确定您在此之后要实现的目标。只需在第一个示例中使用dtime,就可以正确排序。

答案 1 :(得分:2)

正确排序日期和时间。仔细看看。当白天变为第22天时,时间再次从顶部开始,然后开始下降。它首先下降日期,然后是时间。