SELECT
apa.sale_type_id,
apa.status
FROM vt.applications a
JOIN orders o ON a.order_id = o.id
LEFT JOIN (
SELECT
apa.order_id,
apa.sale_type_id,
apa.status,
ROW_NUMBER() OVER (PARTITION BY apa.order_id, apa.sale_type_id ORDER BY apa.created_at DESC) AS rn
FROM cc.additional_projects_actions apa
) apa ON apa.order_id = a.order_id AND apa.sale_type_id = a.sale_type_id AND apa.rn = 1
WHERE
o.id = 64
AND a.sale_type_id IS NOT NULL
ORDER BY a.created_at DESC;
Выложите в вопросе: Структуру таблицы (CREATE TABLE), пример данных (INSERT INTO, 5-7 записей)
заданные критерии отбора и требуемый для всего этого результат
?|
, но только для чисел. Т.е в базе есть 10 записей, которые содержат ID 5 (внутри JSON), также 20, которые содержат ID 7 (внутри JSON). Передал array['7', '5'] - выбрались все 30 записей, передал array['7'] - только 20. Понятно, что в колонке, в JSON, может быть сразу два или больше ID, по которым мы ищем..where(function () {
if (filters.niches && filters.niches.ids.length) {
const niches = filters.niches.ids
this.whereRaw(`c.leads->'niches'->'ids' \\?| array[${niches.map(_ => '?').join(',')}]`, niches)
}
})
А не на пересечение с набором значений.
Возможное решение - разобрать JSON-массив на элементы, собрать в обычный массив и использовать для двух массивов оператор &&