2016-08-05 2 views
-1

x 일 간격 내에있는 레코드의 수를 얻고 싶습니다. 간격은 겹쳐지고 있습니다. 예 : 주어진 기간 (30 일을 말하십시오)에 대해 처음 5 일 (1 일 - 5 일 포함)에 대한 계산을 얻은 다음 2 일 - 6 일, 그 다음 3 일 - 7 일을 계산 한 다음 하루 4 일 ~ 8 일 등 하루 26 일 ~ 30 일까지중복되는 날짜 범위에서 개수를 검색하는 방법은 무엇입니까?

가장 좋은 방법은 무엇입니까? 30 일 동안 모든 데이터를 검색 한 다음 그룹화 할 수 있습니까? 각 하위 간격에 대한 쿼리를 가져온 다음 서로 결합합니다. 다른 방법은 없습니까? 쿼리의 모양은 어떻습니까?
출력 예제에서는 범위가 반드시 유용하지는 않습니다.

count, range 
    30, 2016-01-01 - 2016-01-05 
    32, 2016-01-02 - 2016-01-06 
    34, 2016-01-03 - 2016-01-07 
    33, 2016-01-04 - 2016-01-08 

희망 사항을 잘 모르겠 으면 알려주세요. 분명히 알려 드리겠습니다.

감사합니다!

+0

범위의 테이블을 생성 한 다음 날짜가 상위 및 하위 범위 그룹 by 및 count 사이 일 때 원래 테이블을 조인합니다. 나는 mysql에서 테이블을 생성하는 가장 좋은 방법을 모르지만 주위를 둘러보고 그 대답을 찾을 수 있기 때문에 코드를 추가하지 않았다. – Matt

답변

1

각 날짜 범위가 포함 된 표로 가입해야합니다. 당신은 UNION의 무리와 함께 즉시 만들 수 있습니다.

SELECT t1.start, t1.end, COUNT(t2.date) AS count 
FROM (SELECT '2016-01-01' AS start, '2016-01-05' AS end 
     UNION 
     SELECT '2016-01-02', '2016-01-06' 
     UNION 
     SELECT '2016-01-03', '2016-01-07' 
     UNION 
     SELECT '2016-01-04', '2016-01-08' 
     ...) AS t1 
LEFT JOIN yourTable AS t2 ON t2.date BETWEEN t1.start AND t1.end 
GROUP BY t1.start 

LEFT JOIN 당신이없는 기록을 가진 어떤 날짜 범위의 0 수를 볼 것을 보장한다.

+0

이것은 내가 기대고 있었던 것이다. LEFT JOIN도 잘 잡으세요! 그것을 놓쳤을 것입니다. –

관련 문제