у меня есть таблица t. значения в столбце t.sequence упорядоченные и уникальные.
есть таблица t_intervals со столбцами id - id интервала, start и end - которые указывают на t1.sequence.
я могу получить данные из t для 1 интервала, например так:
WITH interval AS(
SELECT start, end from t_intervals
WHERE id=10
)
SELECT * FROM t
WHERE sequence BETWEEN (select start from interval)
AND (select end FROM interval);
но я бы хотел получить получить данные для нескольких интервалов и для заранее известного их количества могу сделать так:
WITH interval1 AS(
SELECT start, end from t_intervals
WHERE id=10
),
interval2 AS(
SELECT start, end from t_intervals
WHERE id=20
)
SELECT * FROM t WHERE
WHERE sequence BETWEEN (select start from interval1)
AND (select end FROM interval1)
OR sequence BETWEEN (select start from interval2)
AND (select end FROM interval2);
но я могу фильтровать t_intervals по разным правилам и не могу знать сколько интервалов под них попадет, поэтому я бы хотел иметь что-то вроде этого:
WITH intervals AS(
SELECT start, end from t_intervals
WHERE id in (2,10,30, ..., n)
)
SELECT * FROM t
WHERE OR_ROWS(
sequence BETWEEN (select start from intervals)
AND (select end FROM intervals)
);
где OR_ROWS сгенерирует условие:
sequence BETWEEN (select start from intervals) AND (select end FROM intervals)
для каждой строки.
как сделать что-то подобное? Спасибо.