【问题标题】:MYSQL - Order timestamp values ascending in order, from newest to oldest?MYSQL - 按从最新到最旧的顺序升序排列时间戳值?
【发布时间】:2012-07-14 15:51:09
【问题描述】:

我在尝试按时间戳值对某些结果进行排序时遇到了问题。

我希望根据时间戳值从最新到最旧显示这些结果。

为了解释这一点,假设有 3 个结果:

2012-07-11 17:34:57
2012-07-11 17:33:28
2012-07-11 17:33:07

这个结果集是我所需要的,但给出了以下查询

SELECT timestamp
FROM randomTable
ORDER BY timestamp ASC

我明白了:

2012-07-11 17:34:57
2012-07-11 17:33:07
2012-07-11 17:33:28

这是因为它是按数值排序的,0728 之前。

如果我按降序排序,我得到

2012-07-11 17:33:07
2012-07-11 17:33:28
2012-07-11 17:34:57

这是我要找的……但它是相反的。

所以我的问题很简单,如何按照我描述的升序对这些值进行排序?

编辑:

EDIT2:

CREATE TABLE `user_quotations` (
 `id` int(100) NOT NULL AUTO_INCREMENT,
 `quoteNumber` int(100) NOT NULL,
 `lastModified` datetime NOT NULL,
 `userId` int(100) NOT NULL,
 `manufacturer` varchar(250) COLLATE latin1_general_ci NOT NULL,
 `modelNumber` varchar(250) COLLATE latin1_general_ci NOT NULL,
 `productDesc` varchar(1000) COLLATE latin1_general_ci NOT NULL,
 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 KEY `quoteNumber` (`quoteNumber`,`lastModified`,`userId`,`manufacturer`,`modelNumber`,`timestamp`),
 KEY `productDesc` (`productDesc`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci

【问题讨论】:

  • 您的结果集不正确。当升序排列时,2012-07-11 17:34:57 永远不会出现在 2012-07-11 17:33:07 之前。
  • 检查时间戳的其他部分。他们是一样的吗?看起来你忽略了一些东西
  • sqlfiddle.com/#!2/421ce/1 感觉不对劲。
  • 另外,你的降序(想要这样)也不可能。
  • @BlackberryFan,把反引号放在你的timestamp 列上,你可能是按保留关键字排序的。你可以看出这是不对的,因为 :34 总是在 :33 之后,所以忽略 :07 与 :28 的问题,其他事情都是错误的。

标签: mysql timestamp sql-order-by


【解决方案1】:

您的查询:

SELECT timestamp
FROM randomTable
ORDER BY timestamp ASC;

是完美的。但我怀疑您在帖子中提供的结果。 你发布了:

2012-07-11 17:34:57
2012-07-11 17:33:07
2012-07-11 17:33:28

但是结果在你的sqlbox中显示:

2012-07-11 17:34:57
2012-07-15 17:33:07
2012-07-15 17:33:28

这是完全正确的。

这是您发帖中的拼写错误吗?
如果没有,请尝试以下操作:

SELECT timestamp( `timestamp` ) as 'timestamp'
FROM randomTable
ORDER BY 1 ASC;

【讨论】:

    【解决方案2】:

    检查表的创建语句。我希望您的时间戳列确实是一个字符串。

    Show create table tablename;
    

    【讨论】:

    • 几乎肯定;问题是,即使对于一个字符串,它也没有正确排序。
    • Ray,感谢您的回复,我已编辑我的答案以包含所请求的信息。这是您所要求的全部输出。
    • @BlackberryFan 看到下面别人放的答案......看起来你只是错过了根据你的截图阅读时间戳
    【解决方案3】:

    如果您将查询编写为:

    select q.`timestamp`
    from user_quotations as q
    order by q.`timestamp`
    limit 30
    

    您应该正确订购它们。

    如果不是,则时间戳数据有问题。寻找前导/尾随空格、奇数字符等。

    【讨论】:

    • 非常感谢您的回复和您的 effprt,但这仍然返回相同的结果集。这可能与我使用的日期格式无关,因为它不是标准吗?或者可能是表格字符集,虽然我不明白这会如何影响时间戳字段。
    • 无论日期格式如何,如果它是日期时间字段,它应该始终正确排序。您的浏览器/ phpMyAdmin 可能正在缓存您的结果,但没有办法(除非您有一个真正损坏的 MySQL 实例)您应该看到上述查询以这种方式排列的列。
    • 这是我指定的时间戳字段。有一个日期时间字段,但它不是我请求结果的那个。
    【解决方案4】:

    屏幕截图显示了 15 日的两个结果和 11 日的一个结果。可能会稍微影响订单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2015-10-28
      相关资源
      最近更新 更多