Sql 选择左连接的第一行
我想做一个左连接。但我只想要联接表的第一行 当我这样做时:Sql 选择左连接的第一行,sql,postgresql,klipfolio,Sql,Postgresql,Klipfolio,我想做一个左连接。但我只想要联接表的第一行 当我这样做时: SELECT DISTINCT c.reference FROM contracts as c 输出:7400行 但是当我尝试做左连接时,我有很多重复项 我已经试着只得到第一排,但它不起作用。这是我的密码: SELECT DISTINCT c.reference, contract_premiums.start_date FROM contracts as c LEFT OUTER JOIN contract_premiu
SELECT DISTINCT
c.reference
FROM contracts as c
输出:7400行
但是当我尝试做左连接时,我有很多重复项
我已经试着只得到第一排,但它不起作用。这是我的密码:
SELECT DISTINCT
c.reference,
contract_premiums.start_date
FROM contracts as c
LEFT OUTER JOIN contract_premiums ON contract_premiums.contract_id=(
SELECT contract_id FROM contract_premiums
WHERE contract_premiums.contract_id = c.id
ORDER BY contract_premiums.created_at ASC
LIMIT 1)
输出:11500行
请注意
Postgresql
中的数据库,我在klipfolio
中使用此请求。如果您只想获得每个参考文件的最新开始日期,可以使用聚合:
select c.reference, max(cp.start_date) max_start_date
from contracts c
left join contracts_premiums cp on cp.contract_id = c.id
group by c.reference
这保证了每个引用只能获得一行
如果您希望从合同中获得更多的列,或者如果您希望按开始日期以外的列进行排序(可能,您希望在处创建),则另一个选项是在上有区别:
select distinct on (c.reference) c.reference, cp.start_date, cp.created_at
from contracts c
left join contracts_premiums cp on cp.contract_id = c.cid
order by c.reference, cp.created_at desc