gpt4 book ai didi

MySQL 在具有不同值的同一列上两次连接同一个表,仅返回最近的行

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

我一直在尝试解决复杂 JOIN 的一小部分问题。

我们有一个“说明”表和一个“估算”表。在“估计”中,我们有多个行用于给定指令的不同类型的估计

指令表

id | address | status
1 | 27 TAYLOR ROAD, ALBION PARK NSW 2527 | InProgress

估算表

id | instruction_id | basis | basis_date | basis_value
1 | 1 | ContractPrice | 2012-04-05 | 124000
2 | 1 | CAMV | 2012-02-01 | 120000
3 | 1 | CustomerEstimate | 2012-06-07 | 132000
4 | 1 | ContractPrice | 2013-01-03 | 140000
5 | 1 | CustomerEstimate | 2013-02-09 | 145000

我们实际上想要的是基于 instructions.id = estimates.instruction_id 和 estimates.basis 的 2 个“instructions”与“estimates”的连接 1) 最近的“CustomerEstimate”(将 basis_date 和 basis_value 别名为 estimate_date 和 estimate_value) 2) 最近的“ContractPrice”(再次将 basis_date 和 basis_value 别名为 contact_date 和 contract_value)。

预期的结果如下;

id | address | status | contract_price | contract_date | estimate_date | estimate_value
1 | 27 TAYLOR ROAD, ALBION PARK NSW 2527 | InProgress | 2013-01-03 | 140000 | 2013-02-09 | 145000

非常感谢 SQL 专家的帮助。

非常感谢,特伦特。

最佳答案

尝试

SELECT i.id,  
i.address,
i.status,
p.max_date contract_date,
p.basis_value contract_price,
e.max_date estimate_date,
e.basis_value estimate_value
FROM Instructions i LEFT JOIN
(
SELECT q1.instruction_id, max_date, basis_value
FROM Estimates e JOIN
(
SELECT instruction_id, MAX(basis_date) max_date
FROM Estimates
WHERE basis = 'CustomerEstimate'
GROUP BY instruction_id
) q1 ON e.instruction_id = q1.instruction_id AND e.basis_date = q1.max_date
) e ON i.id = e.instruction_id LEFT JOIN
(
SELECT q2.instruction_id, max_date, basis_value
FROM Estimates e JOIN
(
SELECT instruction_id, MAX(basis_date) max_date
FROM Estimates
WHERE basis = 'ContractPrice'
GROUP BY instruction_id
) q2 ON e.instruction_id = q2.instruction_id AND e.basis_date = q2.max_date
) p ON i.id = p.instruction_id

输出:

| ID |                              ADDRESS |     STATUS | CONTRACT_PRICE | CONTRACT_DATE | ESTIMATE_VALUE | ESTIMATE_DATE |----------------------------------------------------------------------------------------------------------------------------|  1 | 27 TAYLOR ROAD, ALBION PARK NSW 2527 | InProgress |         140000 |    2013-01-03 |         145000 |    2013-02-09 |

这是 SQLFiddle 演示。

关于MySQL 在具有不同值的同一列上两次连接同一个表,仅返回最近的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17258140/

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