набор интервалов — время корпоративов, исключая время в отпуске ( получаю подзапросом ).
Я пока не могу понять, как исключить интервалы из основного запроса, которые входят в результаты подзапроса.
Выглядит вот так:
SELECT corporate_party.start_at - corporate_party.end_at as corp
FROM "user_profile"
INNER JOIN "user_profile_corporate_party"
ON ("user_profile"."id" = "user_profile_corporate_party"."user_profile_id")
INNER JOIN "corporate_party" ON ("user_profile_corporate_party"."corporate_party_id" = "corporate_party"."id")
WHERE (("user_profile.id" = $1) AND ("corporate_party.start_at" >= $2) AND ("corporate_party.end_at" <= $3) AND
("corp" NOT IN ((SELECT end_at - start_at
FROM "vacation"
WHERE (("end_at" <= $4) AND ("start_at" >= $5) AND ("user_profile_id" = $6))))))
основная сложность для меня в самом конце — вот тут
("corp" NOT IN ((SELECT end_at - start_at
FROM "vacation"
WHERE (("end_at" <= $4) AND ("start_at" >= $5) AND ("user_profile_id" = $6))))))
corp — это интервал, и подзапрос — тоже возвращает набор интервалов
Ну, или возможно я вообще не правильно подумал о решении этой задачи и есть какой - то другой способ ?)
А я, например, не могу понять по описанию, в чём суть задачи (да и тип данных всех этих start_at неизвестен). И да, запрос написан странно (трудно читать) — слишком много quoting, как будто это какой-то генератор / ORM, но наличие отдельных неквалифицированных полей, вроде ("corporate_partystart_at" >= $2) как бы намекает, что нет...
Обсуждают сегодня