获得最后9次出现

时间:2018-06-18 08:59:55

标签: mysql sql

我正在使用MySQL 5.0.12,我有下表:

    has_many :control_comments, class_name: "Control::Comment",inverse_of: 'control_news', :foreign_key => 'control_news_id'

正如您所看到的,我发生了8次post_id | 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 |

因此,我希望从今天的日期开始最后6次。

10

我知道如何选择正确的post_id,但我正在努力选择今天的最后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 |

如何从今天的日期算起最后6次?

3 个答案:

答案 0 :(得分:5)

你会这样做:

SELECT * FROM product 
WHERE post_id = 10 
ORDER BY created_at DESC 
LIMIT 6

您按日期降序排序,这样您就可以获得最新的日期。而且你限制为6,所以你只能得到你正在寻找的6个。

答案 1 :(得分:1)

使用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

答案 2 :(得分:1)

使用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:34

SQL小提琴:http://sqlfiddle.com/#!9/3c36fc/1/0