Чтобы применять агрегатные функции, такие как min
, SQL требует, чтобы вы были очень точны в отношении того, к какому набору данных относится агрегат. Даже если SQL разрешит написанный вами запрос, вы все равно получите минимальный created_date
для каждой строки, а не для каждой tenant_id
.
Чтобы сделать то, что, я думаю, вы пытаетесь сделать, вы должны использовать подзапрос, чтобы получить минимальное значение created_date
для каждого tenant_id
, а затем использовать это значение в своем поле active
.
SELECT o.tenant_id AS tenant_id,
CASE WHEN o.created_date >= min_created_date THEN TRUE ELSE FALSE END AS active
FROM reporting.t_order o
LEFT JOIN
(SELECT tenant_id, MIN (created_date) AS min_created_date
FROM reporting.t_me_bill_pay_charge
WHERE retired_date IS NULL) mbpc
ON o.tenant_id = mbpc.tenant_id
WHERE o.retired_date IS NULL
Как правило, если вы пытаетесь обмануть требования к синтаксису SQL, выполняя что-то вроде group by 1
, это явный признак того, что ваш подход некорректен.