간격의 테이블이 주어지면 각 간격의 시작 (현재 간격 자체 포함)에서 현재 열린 간격의 수를 효율적으로 쿼리 할 수 있습니까? 나는 그 자체에 대한 데이터 집합을 결합하여이 문제를 해결할 수있는 작은 데이터 세트에BigQuery에서 겹치는 간격의 수
start_time count 1 1 2 2 3 3 5 3 7 2 19 1
: : 나는 다음과 같은 출력을 원하는
start_time end_time 1 10 2 5 3 4 5 6 7 11 19 20
: 다음 표에 주어진 예를 들어
,
WITH intervals AS (
SELECT 1 AS start, 10 AS end UNION ALL
SELECT 2, 5 UNION ALL
SELECT 3, 4 UNION ALL
SELECT 5, 6 UNION ALL
SELECT 7, 11 UNION ALL
SELECT 19, 20
)
SELECT
a.start_time,
count(*)
FROM
intervals a CROSS JOIN intervals b
WHERE
a.start_time >= b.start_time AND
a.start_time <= b.end_time
GROUP BY a.start_time
ORDER BY a.start_time
대형 데이터 세트의 경우 CROSS JOIN은 비효율적이며 불필요합니다. 주어진 대답은 오직 작은 간격의 이전 간격 (start_time
으로 정렬 될 때)에 달려 있습니다. 실제로, 내가 가지고있는 데이터 세트에서, 그것은 시간을 초과합니다. 이것을 달성하기위한 더 좋은 방법이 있습니까? CROSS JOIN을
u는 출력을 설명 할 수에서 더미 데이터로 예를 아래에 사용하여 그것으로 재생할 수 있습니다
이
을 포함되지 조인? – Teja출력은 입력으로부터 각 간격의 시작 시간 및 해당 간격의 시작 시간에 열린 간격 (시작 시간 <= 해당 시간 및 끝 시간> = 해당 시간의 행)의 수입니다. –