我有一张表,用于存储合同上的行。每份合同都有他自己的唯一ID,它也有其父母合同的ID。例如:如何连接到另一个表并仅返回最近的匹配行?
+-------------+---------+
| contract_id | line_id |
+-------------+---------+
| 1111 | 100 |
| 1111 | 101 |
| 1111 | 102 |
+-------------+---------+
我有另一个表,它存储了合约行的历史变化。例如,每当合同行上的单位数量发生变化时,新的行就会被添加到表格中。示例:
+-------------+---------+--------------+-------+
| contract_id | line_id | date_changed | units |
+-------------+---------+--------------+-------+
| 1111 | 100 | 2016-01-01 | 1 |
| 1111 | 100 | 2016-02-01 | 2 |
| 1111 | 100 | 2016-03-01 | 3 |
+-------------+---------+--------------+-------+
正如您所见,ID为1111的合同的合同行已在3个月内编辑了3次。当前值是3个单位。
我正在对合同行表进行查询以选择所有数据。我想加入历史数据表,并为每个合约行选择最近的行,并在结果中显示单位。我该怎么做呢?
预期结果(将有用于101和102单结果为好):
+-------------+---------+-------+
| contract_id | line_id | units |
+-------------+---------+-------+
| 1111 | 100 | 3 |
+-------------+---------+-------+
我尝试查询下面左连接但它返回3行而不是1
查询:
SELECT *, T1.units
FROM contract_lines
LEFT JOIN (
SELECT contract_id, line_id, units, MAX(date_changed) AS maxdate
FROM contract_history
GROUP BY contract_id, line_id, units) AS T1
ON contract_lines.contract_id = T1.contract_id
AND contract_lines.line_id = T1.line_id
实际结果:
+-------------+---------+-------+
| contract_id | line_id | units |
+-------------+---------+-------+
| 1111 | 100 | 1 |
| 1111 | 100 | 2 |
| 1111 | 100 | 3 |
+-------------+---------+-------+
区别在这里没有'单位'字段。你从原始表格中获得 –
这对我不起作用。在最后两行中,我收到一条错误消息:“多部分标识符'contract_lines.contract_id'无法绑定”,分别与'line_id'相同。这不是我熟悉的错误。有任何想法吗? – Equalsk