0

我有以下查询:

SELECT pro.* 
  FROM tb_AutProposta pro, tb_AutParcelamento par 
 WHERE pro.id = par.id

但是,想将每个限制tb_AutParcelamento为 1。尝试了“Subselect”,但没有成功。

table pro 是一个合约,par 是这个合约的包裹。对于每份合同,生成 n 个包裹,并且为每个包裹生成一个到期日,我需要知道每份合同的最后到期日。

任何的想法?

4

3 回答 3

1

在不真正了解您的数据架构以及您正在尝试做什么的情况下,您可以尝试限制返回的 par 记录数。

SELECT pro.*, FIRST(par.Id) as FirstParcel
FROM tb_AutProposta pro, tb_AutParcelamento par 
WHERE pro.id = par.id
GROUP BY pro.*
于 2012-06-26T18:09:02.800 回答
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

于 2012-06-26T19:06:12.497 回答
1

我只是编造了一些字段名称,因为我们不知道您的确切表结构。

此查询在以下假设下工作:

  • 您想要每个相关合同的最新(“最高”)包裹到期日
  • 您的包裹表中due_date有字段。pro_idtb_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
于 2012-06-26T19:12:49.877 回答