사용자가 Google BigQuery의 단일 데이터 표에서 TV 프로그램을 시청하는 시작 시간과 종료 시간을 일치 시키려고하지만 '테이블 이름을 사용할 수 없습니다.'라는 오류 메시지가 계속 표시되기 때문에이를 수행하는 방법을 모르겠습니다. 데이터 세트 이름이 누락되었습니다. "동일한 표에서 가장 가까운 매칭 시간을 찾으려면 어떻게합니까?
이벤트 테이블
user_id show_id event_type logtime
------- -------- ---------- -----------------------
john 123 start 2016-08-01 06:00:00 UTC
john 123 start 2016-08-01 06:15:00 UTC
john 123 end 2016-08-01 06:10:00 UTC
john 123 end 2016-08-01 06:16:00 UTC
원하는 결과
user_id show_id start_time end_time
------- -------- ----------------------- -----------------------
john 123 2016-08-01 06:00:00 UTC 2016-08-01 06:10:00 UTC
john 123 2016-08-01 06:15:00 UTC 2016-08-01 06:16:00 UTC
이 지금까지 내 쿼리입니다 :
SELECT user_id, show_id, st.logtime AS start_time, et.logtime AS end_time
FROM
(SELECT user_id, show_id, logtime FROM events WHERE event_type = 'start') AS st
JOIN
(SELECT user_id, show_id, logtime FROM events WHERE event_type = 'end') AS et
ON
st.logtime = (SELECT min(logtime) FROM events WHERE event_type = 'end')
AND st.user_id = et.user_id AND st.show_id = et.show_id
미하일의 대답은 몇 가지 예를 검증 한 후 최선을 작동하는 것 같다
하지만, ...
SELECT
user_id, show_id,
logtime AS start_time,
next_logtime AS end_time
FROM (
SELECT
user_id, show_id, event_type, logtime,
LEAD(logtime) OVER(PARTITION BY user_id, show_id ORDER BY logtime) AS next_logtime,
LEAD(event_type) OVER(PARTITION BY user_id, show_id ORDER BY logtime) AS next_event_type
FROM events
)
WHERE event_type = 'start'
AND next_event_type = 'end'
동일한 event_type의 연속 인스턴스를 처리하는 논리를 통합하는 방법을 모르겠습니다. 예를 들어 :
event_type logtime
---------- ------------------------
start 2016-08-01 09:20:00 UTC
start 2016-08-01 09:23:00 UTC
start 2016-08-01 09:24:00 UTC
end 2016-08-01 09:24:00 UTC
end 2016-08-01 09:24:00 UTC
이 시나리오에서는, 나는 가장 빠른 시작 시간, 9시 20분 및 초기 종료 시간을 유지하고 싶습니다 9시 24분는 (I ...이 말이 생각).
오류 메시지에 중점을 둡니다. 이것을 시도하면 어떻게됩니까? 'select count (1) x 1 = 2' 이벤트에서 선택 하시겠습니까? –
이 쿼리를 말 그대로 실행해야합니까? 결과적으로 "0"을 얻었습니다. – dnaeye
예.그것은 문제가'events'라는 테이블이 아니라는 것을 당신에게 빨리 말했습니다. 오류의 원인을 찾을 때까지 하위 쿼리로이 접근 방식을 계속하십시오. –