我正在尝试按降序排序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个字段。
答案 0 :(得分:3)
第二个选择中的顺序<{1>}上的主要是,时间仅在主要字段相等时影响它。换句话说,
dtime
实际上只会使用order by col1, col2
来排序具有相同col2
值的行。
这就是多列排序的工作方式。
如果你希望在降序日期内有类似升序的时间,那将会有点棘手,但你只需要打破日期和时间,例如:
col1
在这种情况下,我真的会考虑将其分成两个单独的列以提高效率。您不希望在order by date(dtime) desc, time(dtime) asc
子句中执行每行函数 - 最好为它们分别创建索引。
但是,我认为这不是这种情况。由于order by
是一个日期/时间列,因此您已经已经对日期和时间进行排序,因此我不确定您在此之后要实现的目标。只需在第一个示例中使用dtime
,就可以正确排序。
答案 1 :(得分:2)
正确排序日期和时间。仔细看看。当白天变为第22天时,时间再次从顶部开始,然后开始下降。它首先下降日期,然后是时间。