gpt4 book ai didi

mysql - 多对多关系中每组最大的 n

转载 作者:行者123 更新时间:2023-11-29 20:59:20 24 4
gpt4 key购买 nike

我知道有很多与此类似的问题,但似乎没有什么适合我的问题。我花了相当多的时间研究这个问题,并提出了一个不选择最后一张图像的查询,稍后会详细介绍。所以,问题是有 3 个表

表:图像

| Field             | Type             
+-------------------+------------------
| id | int(10) unsigned
| filename | varchar(255)
| created_at | timestamp
| updated_at | timestamp

表:报价

| Field             | Type             
+-------------------+------------------
| id | int(10) unsigned
| message | varchar(255)
| created_at | timestamp

以及连接它们的表格:offer_images

| Field    | Type             
+----------+------------------
| offer_id | int(10) unsigned
| image_id | int(10) unsigned

所以,问题是:如何从链接到优惠的图像表中选择具有上次更新图像(基于 Updated_at)的所有优惠。这是我到目前为止所得到的:

SELECT `o`.*, `i`.`filename`
FROM `offer_images` AS `oi`
INNER JOIN `offers` AS `o` on `oi`.`offer_id` = `o`.`id`
INNER JOIN `images` as `i` on `oi`.`photo_id` = `i`.`id`
GROUP BY `o`.`id`

该查询选择了所有内容,并且它正在工作,此外它还忽略了 Updated_at 字段。

最佳答案

试试这个:

SELECT o.*, i.*
FROM offers AS o
INNER JOIN (
-- Get the latest update_at date per offer_id
SELECT oi.offer_id, MAX(updated_at) AS max_updated_at
FROM offer_images AS oi
INNER JOIN images AS i ON oi.image_id = i.id
GROUP BY oi.offer_id
) AS d ON o.id = d.offer_id
INNER JOIN offer_images AS oi ON oi.offer_id = d.offer_id
INNER JOIN images AS i ON i.id = oi.image_id AND i.updated_at = d.max_updated_at

查询使用派生表来获取每个 offer_id 的最新 update_at 日期。使用此日期,我们可以连接回 images 表,以获得每组中最大的 n 条记录。

关于mysql - 多对多关系中每组最大的 n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37364897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com