我有一个MySQL数据库和一个transactions
表。我想检索过去一小时内的最后10笔交易,按升序排序。
我正在运行的查询是;
SELECT TimeStamp, SerialNo
FROM transactions
WHERE TimeStamp > NOW() - INTERVAL 1 HOUR
ORDER BY TimeStamp ASC
LIMIT 10
这会生成一个事务列表,如下所示;
20551094 2017-08-15 15:47:12
20551095 2017-08-15 15:47:15
20551096 2017-08-15 15:47:38
20551097 2017-08-15 15:47:51
20551098 2017-08-15 15:47:56
20551099 2017-08-15 15:48:23
20551100 2017-08-15 15:48:23
20551101 2017-08-15 15:48:26
20551102 2017-08-15 15:48:29
我知道在 15:48:29之后有多次交易,我没有看到。
每当我删除LIMIT 10
时,我都会收到数以千计的交易,但我只想要最近的10笔。如下所示;
20551421 2017-08-15 16:47:55
20551422 2017-08-15 16:48:05
20551423 2017-08-15 16:48:06
20551424 2017-08-15 16:48:10
20551425 2017-08-15 16:48:15
20551426 2017-08-15 16:48:20
20551427 2017-08-15 16:48:26
20551428 2017-08-15 16:48:28
20551429 2017-08-15 16:48:30
20551430 2017-08-15 16:48:51
我按此顺序需要它们的原因是因为我在我的网站上显示实时数据。
我怎样才能做到这一点?感觉就像我在这里做些傻事一样!
感谢任何建议。
答案 0 :(得分:1)
我想检索过去的最近10笔交易 小时,按升序排序。
您需要ORDER BY TimeStamp DESC
才能获得最后一行。如果要按升序显示它们,可以使用子查询并反转外部查询中的顺序:
SELECT TimeStamp, SerialNo
FROM (
SELECT TimeStamp, SerialNo
FROM transactions
WHERE TimeStamp > NOW() - INTERVAL 1 HOUR
ORDER BY TimeStamp DESC
LIMIT 10
) sub
ORDER BY TimeStamp ASC
答案 1 :(得分:0)
如果您想要10个最新的交易,您的代码应该是:
SELECT TimeStamp, SerialNo
FROM transactions
WHERE TimeStamp > NOW() - INTERVAL 1 HOUR
ORDER BY TimeStamp DESC
LIMIT 10
即。您的ORDER BY
应为DESC
,因为您需要从最新到最早的时间戳,然后使用LIMIT 10