데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
SELECT DataTime, sum(od_qty) as Cnt, sum(om_TAmount) as Amount
FROM (
SELECT Om_Date, Substring(Om_Date from 1 for 13) DataTime, od_qty, om_TAmount
FROM lowdataview) where OM_DATE >= '2014-12-29 ' and OM_DATE <= '2014-12-30 24:00:00'
GROUP BY DataTime
ORDER BY DataTime DESC
와 같이 subString 함수로 시간별 섬값을 구하고 있습니다.
단지 원본 테이블에 특정 시간의 레코드가 없으면
아예 건너 띄워지기 때문에 원본에 레코드가 없을때 시간데이터만 만들고 값들을 0으로 채울순 없나해서 질문드립니다
DB를 파이어버드를 쓰고 있는데 기존에 mssql 의 DATEDIFF 나 DATEADD를 쓰면 쉽게해결 할수 있겠지만 이런 함수도 인자방식이 완전히 다르더군요...
그림에서 비는 레코드는 시간별로 시퀀스로 채워 넣고 값들은 0으로 채우고 싶습니다.
이런류의 문제는 제가 항상 권장하는 방식이 있습니다.
100년치 날짜를 가지고 있는 테이블 하나 만들어서 OUTER JOIN 하라는 거죠.
위 사례의 경우는 시간까지 있으니까
100년치 날짜 테이블과 01~24까지 가지고 있는 테이블을 조인하여 날짜시간 테이블을 만들고 이 테이블과 OUTER JOIN 하시면 될겁니다.