我知道在同一个主题上有很多问题,但我没有弄对。
我正在跟踪此链接,并尝试此查询:
SELECT * FROM food_list f
INNER JOIN (
SELECT MAX(updated_on) max_row, rate, item_id
FROM food_rate
GROUP BY rate, item_id
) f_max ON (f_max.item_id = f.id)
INNER JOIN food_rate fr ON (fr.updated_on = f_max.max_row);
但我的记录不对。
这是我的table:
food_list:
id | item
----------------
1 | pizza
2 | burger
3 | sandwich
food_rate:
id | item_id | rate | updated_on
----------------------------------------------
1 | 1 | 80 | 2018-06-01
2 | 2 | 90 | 2018-06-01
3 | 3 | 70 | 2018-06-01
4 | 1 | 60 | 2018-06-02
我想收到食品价格表中每一项最新日期的记录。
以下是预期输出:
item_id | rate | updated_on
----------------------------------
1 | 60 | 2018-06-02
2 | 90 | 2018-06-01
3 | 70 | 2018-06-01
2条答案
按热度按时间t98cgbkg1#
你只想从
food_rate
表,因此不需要加入任何内容。从中选择food_rate
哪里updated_on
是最大值updated_on
对于item_id
:从mysql 8.0开始,您还可以使用窗口函数来实现这一点,因此只需读取一次表:
im9ewurl2#
可以使用相关子查询获取最新的行:
您可以添加
join
对于过滤:您可以使用聚合方法,但它可能效率较低(给定适当的索引),因为
join
在food_list
可能会减少行数。您在中缺少一个条件on
条款: