gpt4 book ai didi

mysql - 连接表中的 ORDER BY 和 LIMIT 1

转载 作者:行者123 更新时间:2023-11-29 04:46:25 26 4
gpt4 key购买 nike

很长一段时间以来,我一直在努力解决这个问题,但我开始放弃了。

为简化案例,假设我有 2 个表。主表是 articles,我将其加入 contracts。契约(Contract)表有一个结束日期。 我只想从这里为每篇文章选择 1(一)行,选择最新的 contract_to date.

我试过类似 LEFT JOIN contracts ON (contracts.article = articles.id) ORDER BY contract_to DESC LIMIT 1 但显然它不起作用。

我该怎么做?

请假装下面契约(Contract)表中每一行的日期范围不同。
此外,所有商品契约(Contract)的最晚日期都不相同,因此我不能只确定最晚日期然后将其粘贴到 WHERE 子句中。

enter image description here

最佳答案

要获取最新的 contract_to 值,您需要一个 MAX() 聚合。执行此操作的正确方法是使用子查询联接仅获取 articleMAX(contract_to) 值,然后将其与行的其余值联接。最后,整个结构可以与 articles 表相结合。

SELECT
articles.*,
contracts.*
FROM
articles
/* Join against a subquery which returns only the article and latest contract_to */
LEFT JOIN (
SELECT article, MAX(contract_to) AS contract_to
FROM contracts
GROUP BY article
) maxcontract ON articles.article_id = maxcontract.article
/* and join that against the rest of the contracts table, on those two column values */
JOIN contracts
ON maxcontract.article = contracts.article
AND maxcontract.contract_to = contracts.contract_to

由于 MySQL 对 GROUP BY 子句的内容很宽松,实际上可能不需要此方法,单独加入 contracts 表,您可能会这样做单独使用子查询连接,但这在大多数其他 RDBMS 中不起作用,这确实是不依赖 MySQL 怪异行为的正确方法。

关于mysql - 连接表中的 ORDER BY 和 LIMIT 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18293451/

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