time | value |
2024-01-18 21:43:11 | 0 |
2024-01-18 21:43:12 | 1 |
2024-01-18 21:43:13 | 0 |
2024-01-18 21:43:14 | 1 |
2024-01-18 21:43:15 | 0 |
2024-01-18 21:43:16 | 0 |
2024-01-18 21:43:17 | 0 |
2024-01-18 21:43:18 | 1 |
2024-01-18 21:43:19 | 1 |
2024-01-18 21:43:20 | 1 |
안녕하세요.
이렇게 발생하는 데이터가 있습니다. 마지막 값이 1인 시간은 저장하고 있는 상태입니다.
해당 값은 2024-01-18 21:43:14로 가정하겠습니다.
1. 2024-01-18 21:43:14 이후에 최초 발생한 0의 위치를 가져옵니다.
2. 1번에서 가져온 2024-01-18 21:43:15 이후에 최초 발생한 1의 위치를 가져옵니다.
3. 결과는 1번의 시간, 2번의 시간이 필요합니다.
단순하게 쿼리를 두번 조회하면 되지만 한 번에 처리하는 방법이 있을 것 같아서 질문 드립니다.
2번 방법이 맞는 것 같고 3번은 데이터가 많으면 문제가 되지 않을까 생각이 듭니다.
샘플 코드는 Mariadb로 작성하였지만 적용을 하려는 곳은 RTDB 기반으로 제공해주는 라이브러리를 통해서만 쿼리를 할 수 있습니다.
with, outer join, 함수 등을 사용할 수 없게 되어 있습니다.
단순한 쿼리(?) 로만 처리하는 방법과 함수 등 어떠한 방법을 써도 되는 쿼리 2가지가 궁금합니다.
미리 감사드립니다.
-- 방법 1 select * from test1 a where a.time > '2024-01-18 21:43:14' and a.value = 0 order by a.time limit 1; select * from test1 a where a.time > '2024-01-18 21:43:15.000' and a.value = 1 order by a.time limit 1; -- 방법 2 select *, (select time from test1 where time > '2024-01-18 21:43:14' and value = 0 order by time limit 1) from test1 a where a.time > (select time from test1 where time > '2024-01-18 21:43:14' and value = 0 order by time limit 1) and a.value = 1 order by a.time limit 1; -- 방법 3 select * from test1 a , (select time from test1 where time > '2024-01-18 21:43:14' and value = 0 order by time limit 1) b where a.time > b.time and a.value = 1 order by a.time limit 1;