2012-11-26 1 views
1

우리는 'YYYY-mm-dd'의 형식으로 DATE_FROMDATE_TO 두 개의 입력을 가지고 있는데, 질문은 [DATE_FROM, DATE_TO)[DATE_FROM -INTERVAL(DATE_TO,DATE_FROM), DATE_FROM)의 레코드 수를 세는 것입니다. 과거 동일한 시간 간격에있는 레코드 수를 계산하는 방법은 무엇입니까?

우리가 날짜가 자정 시간에 의해 추가되는 다음 쿼리 여기

SELECT 
    count(*) as num_records 
FROM mytable 
WHERE 
    mytable.date_doc >= 'DATE_FROM 00:00:00' 
AND mytable.date_doc <= 'DATE_TO 23:59:59' 

을 수행하는 첫 번째 구간의 레코드 수를 계산하려면 : 분 : 초는 경계에있는 일의 모든 레코드를 힙.

두 번째 시간 inteval에서 같은 수를 수행하는 쿼리를 작성하는 방법은 무엇입니까?

데이터베이스에 하나의 쿼리로 수행하거나 최적의 방법을 제안 할 수 있습니까?

EDIT

인터벌 1 (십일) DATE_FROM = '2012년 11월 12일 23시 59분 59초'

'2012년 11월 3일 0시 0분 0초'DATE_TO

간격 2 (십일) : DATE_FROM = '2012년 10월 24일 0시 0분 0초', DATE_TO = '2012년 11월 2일 23시 59분 59초'

SELECT 
    SUM(IF(DATE(mytable.date_doc) BETWEEN '2012-11-03 00:00:00' AND '2012-11-12 23:59:59', 1, 0)) AS count_interval1, 
    SUM(IF(DATE(mytable.date_doc) BETWEEN '2012-10-24 00:00:00' AND '2012-11-03 00:00:00', 1, 0)) AS count_interval2 
FROM mytable 

은 전문 지식을 주셔서 감사합니다!

+0

업데이트 된 답변 확인 –

답변

1

이 시도하지 :

SELECT 
    SUM(IF(DATE(mytable.date_doc) BETWEEN '2012-11-03' AND '2012-11-12', 1, 0)) AS count_interval1, 
    SUM(IF(DATE(mytable.date_doc) BETWEEN SUBDATE('2012-11-03', DATEDIFF('2012-11-12', '2012-11-03') + 1) AND SUBDATE('2012-11-03', 1), 1, 0)) AS count_interval2 
FROM mytable 

시간을 지정 할 필요가 있습니다.

+0

스 니펫에 구문 오류, 일부 브래킷, 작동하지 않음 – Igor

+0

업데이트 된 쿼리 확인 및 두 번째 상황 세부 정보 확인 –

+0

스 니펫을 추가 했으므로 생성 방법을 모르겠습니다. 유효한 날짜 : 'DATE_FROM-DATE_TO' – Igor

관련 문제