2012-02-10 2 views
2

나는 역사적인 보고서를 먹을 수있는 테이블을 가지고있다. 지금 보고서를 생성하는 데 시간이 걸리고 컴파일 된 데이터를 저장하여 보고서에 제공하는 캐시 테이블을 만들고 싶습니다.SQL : 임의의 일련의 날짜 간격을 감지하는 기본 제공 방법은 무엇입니까?

이러한 캐시 테이블의 키 중 하나는 날짜 필드입니다. 내가 사용하는 일련의 날짜에 아무런 차이가 없는지 확인하고 싶습니다. 나는 1 월 1 일과 3 일에 기록을 갖고 싶지는 않지만 2 번째 기록에는 기록이 없다.

RDBMS의 관계형 도구를 사용하여이를 적용 할 방법을 생각할 수 없습니다. 관련 레코드가 외부에있는 일련의 날짜 - 내 '날짜 시리즈'테이블에 일치하는 행이없는 경우 1 월 2 일을 허용하지 않으려면 날짜 테이블을 설정할 수 있습니다. 자동으로 범위 내 날짜를 건너 뛰지 않도록하는 방법을 알지 못합니다.

데이터베이스 스키마 정의에서이를 자동으로 수행 할 수있는 방법이 있습니까? 아니면 코드에서 틈새를 확인해야합니까?

저는 MySQL을 사용하고 있습니다 만, RDBMS에 무관심한 것 같습니다.

답변

2

내장 된 방법을 모르지만이 방법을 직접 처리 한 방법은 날짜 테이블을 생성하는 것입니다. 나는 정적 테이블 tbDates라고, 그리고 내가 날짜 범위에보고해야하고 내가 데이터를 누락 될 수있는 날짜를 건너 싶지 않을 때, 내가 할 :

select * 
from 
    tbDates d 
    left join myTable t 
     on d.date = t.date 

가 어떤 형식에 따라 그리고 당신의 날짜 컬럼이 당신의 tabl에있는 데이터 타입 당신은 tbDates에 조인 할 수 있도록 데이터를 조금 포맷해야 할 수도 있습니다. 일부 앱에는 tbDates가 없습니다. 이러한 경우에는 원하는 범위에 대해 연속 된 날짜로 임시 테이블을 생성하는 것이 중요합니다.

0

자동으로 수행 할 방법이 없지만 날짜를 생성하여 임시 테이블에 저장할 수 있습니다.

  • 이 결과를 선택하고 임시 테이블
  • 로 가입 날짜 (매일) 종료
  • 삽입 값 시작 날짜에서

    • 가 만든 임시 테이블 : 저장 프로 시저에서 수행 할 수

    • 임시 테이블에서 일치하지 않는 행만 선택하십시오.
  • 1

    이것은 숫자 표의 유용성 (http://www.projectdmx.com/tsql/tblnumbers.aspx).

    수만 개의 행이있는 숫자 테이블을 만듭니다. 그런 다음 해당 테이블에서 선택하고 DATEADD 함수를 사용할 수 있습니다. 장소에 해당 쿼리와

    SELECT DATEADD(d, a.id, '2012-01-01') 
    FROM NumbersTable 
    

    , 좋은 LEFT이 데이터에 가입하기로 간단합니다, 당신은 날짜가 누락 된 것을 볼 수 있습니다.

    다른 방법으로 숫자 표를 사용하는 대신 내가하고 싶은 일은 Dates 테이블을 만드는 것입니다. 사실, 평일 이외의 시간으로 만 일별 테이블을 채울 수 있습니다. 쉬운!

    +0

    이러한 날짜 테이블은 이런 종류의 일에 매우 유용합니다.보통 평일, 휴일 등의 일을 표시하기 위해 표에 여러 개의 열이 있습니다. –