Получите список поставщиков, заказанных по самой ранней из их «истекших» дат истечения срока действия страховки. - PullRequest
0 голосов
/ 02 июля 2019

Мне нужно предоставить фильтр, который сортирует предприятия (у которых «много» контрактов) по их самой ранней дате истечения срока страхования.

Я пробовал:

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

Но это неКажется, это не так - хотя он дает мне самую раннюю дату истечения срока действия в соответствующем столбце, он возвращает только 1 строку, когда у меня 1800 поставщиков и 1700 имеют страховые записи

Мне нужен возвращенный список, который содержитте поставщики 1800, с колонкой, которая показывает самую раннюю дату истечения срока страхования (если у них есть)

1 Ответ

1 голос
/ 02 июля 2019

Вам не хватает 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...