【发布时间】: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
这是因为它是按数值排序的,07 在 28 之前。
如果我按降序排序,我得到
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