我有以下查询:
SELECT pro.*
FROM tb_AutProposta pro, tb_AutParcelamento par
WHERE pro.id = par.id
但是,想要将每个tb_AutParcelamento
限制为1.尝试" Subselect",但没有成功。
表pro是合约,par是本合约的包裹。对于每个合同,生成n个包裹,并且,对于每个包裹生成到期日,并且我需要知道每个合同的最后到期日期。
有什么想法吗?
答案 0 :(得分:1)
如果不真正了解您的数据架构以及您尝试执行的操作,您可以尝试限制返回的par记录数。
SELECT pro.*, FIRST(par.Id) as FirstParcel
FROM tb_AutProposta pro, tb_AutParcelamento par
WHERE pro.id = par.id
GROUP BY pro.*
答案 1 :(得分:1)
这是一个涉及检索一组记录的分组最大值/最小值的问题。我喜欢使用的方法如下:
SELECT
a.*,
b.due_date
FROM
tb_AutProposta a
INNER JOIN
tb_AutParcelamento b ON a.id = b.id
INNER JOIN
(
SELECT id, MAX(due_date) AS last_due_date
FROM tb_AutParcelamento
GROUP BY id
) c ON b.id = c.id AND b.due_date = c.last_due_date
将due_date
替换为tb_AutParcelamento
中日期字段的实际名称。
答案 2 :(得分:1)
我刚刚编写了一些字段名称,因为我们不知道您的确切表格结构。
此查询在以下假设下工作:
due_date
和pro_id
字段。 (tb_AutParcelamento.pro_id
是tb_AutProposta.id
)pro_id
,因为我假设条件pro.id = par.id
错误,当两个表中的id
字段都是自动增量值和每个表中的主键时。SELECT pro.*, MAX(par.due_date) as latest_due_date
FROM tb_AutProposta pro
LEFT JOIN tb_AutParcelamento par
ON pro.id = par.pro_id
GROUP BY pro.id