我使用的是MySQL 5.0.12,我有下表:
| post_id | price | created_at |
|---------|-------|---------------------|
| 10 | 3.5 | 2018-06-18 07:36:34 |
| 11 | 4.8 | 2018-06-17 07:36:34 |
| 10 | 5 | 2018-06-16 07:36:34 |
| 10 | 5 | 2018-06-15 07:36:34 |
| 6 | 3.6 | 2018-06-12 07:36:34 |
| 10 | 2 | 2018-06-14 07:36:34 |
| 10 | 6 | 2018-06-13 07:36:34 |
| 10 | 9 | 2018-06-12 07:36:34 |
| 10 | 4 | 2018-06-11 07:36:34 |
| 10 | 3.6 | 2018-06-09 07:36:34 |如您所见,我有8次post_id 10事件。
因此,我想从今天的日期得到最后的6次。
| post_id | price | created_at |
|---------|-------|---------------------|
| 10 | 3.5 | 2018-06-18 07:36:34 |
| 10 | 5 | 2018-06-16 07:36:34 |
| 10 | 5 | 2018-06-15 07:36:34 |
| 10 | 2 | 2018-06-14 07:36:34 |
| 10 | 6 | 2018-06-13 07:36:34 |
| 10 | 9 | 2018-06-12 07:36:34 |我知道如何选择正确的post_id,但我很难从今天的日期中选择最后6个事件:
SELECT * FROM product where post_id = 10 有什么建议可以从今天的日期得到最近的6次吗?
发布于 2018-06-18 09:02:22
你会这样做的:
SELECT * FROM product
WHERE post_id = 10
ORDER BY created_at DESC
LIMIT 6你按日期下降来订购,这样你就可以获得最新的订单。你限制在6,这样你就只能得到你想要的6。
发布于 2018-06-18 09:04:09
使用LIMIT关键字获取查询的n行。例如:
SELECT * FROM product WHERE post_id = 10 LIMIT 6请记住,此示例将返回前6行。您可以使用ORDER BY关键字来控制前6行应该是什么。
就你而言,你需要:
SELECT * FROM product WHERE post_id = 10 ORDER BY created_at DESC LIMIT 6发布于 2018-06-18 09:23:44
使用DATE_ADD(CURDATE(), INTERVAL -6 DAY)。
SELECT *
FROM product
WHERE post_id = 10
AND created_at >= DATE_ADD(CURDATE(), INTERVAL -6 DAY)输出:
post_id price created_at
10 3.5 2018-06-18 07:36:34
10 5 2018-06-16 07:36:34
10 5 2018-06-15 07:36:34
10 2 2018-06-14 07:36:34
10 6 2018-06-13 07:36:34
10 9 2018-06-12 07:36:34SQL:http://sqlfiddle.com/#!9/3c36fc/1/0
https://stackoverflow.com/questions/50905903
复制相似问题