获取最早的“有很多”保险到期日之前订购的供应商列表

时间:2019-07-02 11:56:14

标签: mysql sql

我需要提供一个过滤器,以按保险最早到期日期对“拥有很多”合同的企业进行排序。

我尝试过:

SELECT
    sc.supplier_id,
    b.business_name,
    MIN(c.insurance_expiry) as contract_expiry
FROM ph_supplier_completed sc
    INNER JOIN ph_business b ON sc.supplier_business_id = b.business_id 
    LEFT JOIN ph_supplier_insurance c ON sc.supplier_id = c.supplier_id
ORDER BY
    sc.supplier_id DESC

但这似乎并不正确-尽管它确实为我在其相应列中提供了最早的失效日期,但当我有1800〜供应商和1700〜有保险记录时,它仅返回1行

我需要返回一个包含1800多个供应商的列表,并在该列中显示最早的保险到期日期(如果有的话)

1 个答案:

答案 0 :(得分:1)

您缺少GROUP BY

SELECT sc.supplier_id, b.business_name,
        MIN(c.insurance_expiry) as contract_expiry
FROM ph_supplier_completed sc JOIN
     ph_business b
     ON sc.supplier_business_id = b.business_id LEFT JOIN
     ph_supplier_insurance c
     ON sc.supplier_id = c.supplier_id
GROUP BY sc.supplier_id, b.business_name
ORDER BY contract_expiry;

在大多数数据库中,包括具有默认设置的更新版本的MySQL,您的查询只会因语法错误而失败。

这是一个聚合查询(由于MIN()),但是前两列未聚合且不在GROUP BY子句中。