【问题标题】:mysql not reverse sorting datetime field correctly [closed]mysql没有正确地反向排序日期时间字段[关闭]
【发布时间】:2011-02-23 23:34:03
【问题描述】:

我正在尝试按降序对日期时间字段进行排序。它按天排序就好了。但是,时间部分是随机的。它完美地按升序排序。
样品查询:
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 个字段。

【问题讨论】:

  • 看来时间降序排序正确。请注意,当天是 22 日,时间会跳回到 09:07
  • 确认!我觉得自己像个白痴,不仔细看。很抱歉浪费了您的时间。

标签: mysql datetime sorting sql-order-by


【解决方案1】:

第二次选择中的顺序主要dtime 上,并且时间仅在主要字段相等时才会影响它。换句话说,

order by col1, col2

将有效地仅使用col2 对具有相同col1 值的行进行排序。

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

如果您想要在降序日期内升序时间,这会有点棘手,但您只需要打破日期和时间,例如:

order by date(dtime) desc, time(dtime) asc

在这种情况下,我真的考虑将其分成两个单独的列以提高效率。您不想在 order by 子句中执行每行函数 - 最好为它们设置单独的索引。

但是,我认为情况并非如此。由于dtime 是一个日期/时间列,您已经 对日期和时间进行了排序,所以我不确定您要达到的目标是什么。只需在第一个示例中使用 order by dtime desc 即可正确排序。

【讨论】:

    【解决方案2】:

    日期和时间排序正确。仔细看。当一天变为 22 日时,时间又从顶部开始,然后开始下降。它先递减日期,然后递减时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2020-05-21
      • 2010-10-17
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多