简体   繁体   English

mysql使用MAX(date)获取最后N条记录

[英]mysql get last N records with MAX(date)

So I have following data in a product_rate_history table - 所以我在product_rate_history表中有以下数据- 在此处输入图片说明

I want to select last N records ( eg 7 records ) informing rate change history of given product. 我想选择最后N条记录(例如7条记录),以通知给定产品的价格变化历史。 If product rate is changed more than one time a day, then query should select most recent rate change for that day. 如果产品费率一天更改一次以上,则查询应选择当天的最新费率更改。

So from above table I want output like following for product id 16 - 因此,在上表中,我希望输出类似产品ID 16的输出 -

+-----------+-------------------------+------------------------+
|  product_id    |    previous_rate   |           date         |
+----------------+--------------------+------------------------|
|      16        |      2400          |   2016-04-30 23:05:35  |
|      16        |      4500          |   2016-04-29 11:02:42  |
+----------------+--------------------+------------------------+

I have tried following query but it returns only one row having last update rate only- 我尝试了以下查询,但它仅返回仅具有最后更新率的一行-

SELECT * FROM `product_rate_history` prh
    INNER JOIN (SELECT max(created_on)  as max FROM `product_rate_history` GROUP BY Date(created_on)) prh2
      ON prh.created_on = prh2.max
    WHERE prh.product_id = 16
    GROUP BY DATE(prh.created_on)
    ORDER BY prh.created_on DESC;

First, you do not need an aggregation in the outer query. 首先,您不需要外部查询中的聚合。

Second, you need to repeat the WHERE clause in the subquery (for the method you are using): 其次,您需要在子查询中重复WHERE子句(针对您使用的方法):

SELECT prh.*
FROM product_rate_history prh INNER JOIN
     (SELECT max(created_on) as maxco
      FROM product_rate_history
      WHERE prh.product_id = 16
      GROUP BY Date(created_on)
     ) prh2
     ON prh.created_on = prh2.maxco
WHERE prh.product_id = 16
ORDER BY prh.created_on DESC;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM