select절에서 기간이 나오도록 하는 방법이 있을까요? 0 4 753

by 도리비 [SQL Query] [2020.12.04 02:38:25]


데이터가 없어도 임시 테이블로 기준 날짜들이 나오게 하고 싶습니다... 마치 반복문 처럼 미리 만들어진 세트라고 할까요??

사용목적은 기간 베이스로 사용하고자 합니다.

예를들면 어떤 데이터가 주기적으로 들어오는데 예상치 못하게 못들어올 경우 이를 파악하기 어려운 문제가 있습니다. (다양한 방법이 있지만 데이터 계산을 할 때 누락되면 어디가 비어있는지 쉽게 파악이 안되는 문제)

그래서기준 날짜를 기준으로 left outer join을 걸어서 null 값일 때 x 를 입력하려고 하는데요.임시방편으로 엑셀로 기준 날짜들을 만들어서 테이블에 넣어두고 사용했습니다.

이런 방법이 혹시 쿼리로 간단하게 할 수 있는지 궁금합니다.

ex.

select a.dtm,ifnull(round(b.logvalue,2),'x') val
from (select dtm from dtm_source) a 
left join datas
    b on b.LogDateTime=dtm and b.name = 'test';

에서 a 테이블 부분이 쿼리로 임시테이블을 만들 수 있는건지..? dtm 컬럼의 값 datetime 타입으로 2020-06-30 18:00:00 부터 5분 단위로 들어있음

by 마농 [2020.12.04 08:12:41]

전체 기간에 대한 검색인지? 특정 기간에 대한 검색인지?
전체 인원에 대한 검색인지? 특정 인원에 대한 검색인지?
MySQL 인가요? 버전이 어떻게 되나요?
logvalue 는 숫자인 듯 한데? 문자인 'x' 로 치환하면 이상해 지는데요?


by 도리비 [2020.12.04 14:27:29]

1. 특정기간입니다. (파라미터로 넘깁니다.)

2. 특정 TagName으로 구분합니다.

3. MariaDB 10.5 입니다.

4. LogValue는 숫자입니다. Where절에서 x는 계산하지 않기 위해 식별합니다. (0으로 상관은 없습니다.)

 


by 마농 [2020.12.04 15:15:08]

그냥 "특정기간입니다" 라는 답변 말고, 상세 설명이 있으면 좋겠네요.
검색기간은 가변적인가요? 고정인가요?
어느정도 기간인가요? 예를 들어 줄 수 있나요?
파라미터 예시와 그에 따른 결과 예시.


by 마농 [2020.12.04 17:05:52]
WITH RECURSIVE dtm_source AS
(
SELECT CAST('2020-12-04 09:00:00' AS DATETIME) dtm    -- 검색 시작 시간
 UNION ALL
SELECT dtm + INTERVAL 5 MINUTE
  FROM dtm_source
 WHERE dtm < CAST('2020-12-04 11:00:00' AS DATETIME)    -- 검색 종료 시간
)
SELECT a.dtm
     , b.logvalue
  FROM dtm_source a
  LEFT OUTER JOIN datas b
    ON b.LogDateTime = a.dtm
   AND b.name = 'test'
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입