选择JOIN限制

时间:2012-06-26 17:57:34

标签: mysql join sql

我有以下查询:

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

但是,想要将每个tb_AutParcelamento限制为1.尝试" Subselect",但没有成功。

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

有什么想法吗?

3 个答案:

答案 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_datepro_id字段。 (tb_AutParcelamento.pro_idtb_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