mysql 获取 MAX(date) 的最后 N 条记录
mysql get last N records with MAX(date)
所以我在 product_rate_history table 中有以下数据 -
我想 select 最后 N 条记录(例如 7 条记录)通知给定产品的费率变化历史。如果产品费率一天更改一次以上,则查询应该 select 当天最近的费率更改。
所以从上面 table 我想要如下产品 ID 的输出 16-
+-----------+-------------------------+------------------------+
| product_id | previous_rate | date |
+----------------+--------------------+------------------------|
| 16 | 2400 | 2016-04-30 23:05:35 |
| 16 | 4500 | 2016-04-29 11:02:42 |
+----------------+--------------------+------------------------+
我尝试了以下查询,但它 returns 只有一行只有最后更新率 -
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;
首先,您不需要在外部查询中进行聚合。
其次,您需要在子查询中重复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;
所以我在 product_rate_history table 中有以下数据 -
我想 select 最后 N 条记录(例如 7 条记录)通知给定产品的费率变化历史。如果产品费率一天更改一次以上,则查询应该 select 当天最近的费率更改。
所以从上面 table 我想要如下产品 ID 的输出 16-
+-----------+-------------------------+------------------------+
| product_id | previous_rate | date |
+----------------+--------------------+------------------------|
| 16 | 2400 | 2016-04-30 23:05:35 |
| 16 | 4500 | 2016-04-29 11:02:42 |
+----------------+--------------------+------------------------+
我尝试了以下查询,但它 returns 只有一行只有最后更新率 -
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;
首先,您不需要在外部查询中进行聚合。
其次,您需要在子查询中重复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;