2014-12-29 4 views
1

보조 테이블을 사용하여 그룹을 사용한 후에 간격을 채우려 고합니다. 도와 드릴 수 있습니까?MYSQL "간격"별 그룹 작성

보조 테이블은 "주문"테이블에서

date  quantity 
2014-01-01 7 
2014-01-02 1 
2014-01-04 2 
2014-01-05 3 

원하는 결과와 함께 "주문"테이블에 합류은 "aux 결과에 의해 어떤 순서로 일에

date  quantity 
2014-01-01 0 
2014-01-02 0 
2014-01-03 0 
2014-01-04 0 
2014-01-05 0 
2014-01-06 0 
2014-01-07 0 

그룹을 다루는 테이블 "

date  quantity 
2014-01-01 7 
2014-01-02 1 
2014-01-03 0 
2014-01-04 2 
2014-01-05 3 
2014-01-06 0 
2014-01-07 0 
+0

'결과 별 그룹화'에 대한 쿼리는 무엇입니까?질문을 올바르게 이해하고 있다면'aux' 테이블에 결과와 함께 '외부 조인'을 사용해야한다고 생각합니다. 귀하의 샘플 데이터는 약간의 오해의 소지가 있습니다 ... – sgeddes

+0

내 문제는 외부 조인과 같습니다 .. "dates"테이블은 이미 "aux table"로 생성되었습니다 – Flavio

+0

예, 외부 조인 결과에 의해 보조 테이블 ... – Flavio

답변

1

group by result 테이블을 만드는 방법을 모르면 , 아마도 coalesce으로 찾으십시오. 이런 식으로 뭔가 :주의

select distinct a.date, coalesce(b.quantity,0) quantity 
from aux a 
    left join yourgroupbyresults b on a.date = b.date 

, 당신이 또는 distinct이 필요하지 않을 수도 있습니다 - 귀하의 데이터에 따라 달라집니다.


편집, 귀하의 의견 주어진이 작동합니다 :

select a.date, count(b.date_sent) 
from aux a 
    left join orders b on a.date = date_format(b.date_sent, '%Y-%m-%d') 
group by a.date 
+0

내 그룹 by from : select date_format (date_sent, '% Y- % m- % d'), 주문 수량 (*) – Flavio

+0

@Flavio -이 바이올린 참조 http://sqlfiddle.com/#!2/ 3958ba/1 – sgeddes

+0

많은 덕분에 완벽하게 작동했습니다! – Flavio

1

결과를 사용하여이 같은 것입니다 :

SELECT a.date 
     ,COALESCE(b.quantity,0) as quantity 
FROM auxtable a 
LEFT JOIN groupbyresult b 
    ON a.date = b.date 

을 당신

SELECT a.date 
     ,COALESCE(COUNT(b.somefield),0) as quantity 
FROM auxtable a 
LEFT JOIN table1 b 
    ON a.date = b.date 
GROUP BY a.date 
0

이 같은 문제를 해결하는 하나의 익숙한 방법은 반환 할 날짜의 별개의 목록이 행 소스를 사용하는 것입니다, 다음 : 또한 왼쪽과 같은 쿼리에 그룹화 할 수 있습니다 가입 간격이있는 테이블에 대해 외부 조인을 수행하십시오. 그런 식으로 모든 날짜를 되돌려 놓고 "누락 된"수량 값을 0으로 대체 할 수 있습니다. 예를 들어

:

SELECT d.date 
    , IFNULL(SUM(s.quantity),0) AS quantity 
    FROM distinct_list_of_dates d 
    LEFT 
    JOIN information_source s 
    ON s.date = d.date 
GROUP BY d.date 

그룹에 의해 일부 날짜 값을 제거 할 이유 그것은하지 분명하다. 우리는 여러분이 ANSI 표준 GROUP BY 의미에 대한 MySQL 확장을 사용하고 있으며 행을 삭제하고 있다고 추측 할 수 있습니다. 또는 행을 제외시키는 WHERE 절이있을 수 있습니다. 그러나 우리는 단지 짐작하고 있습니다.


위의 쿼리에서

auxdistinct_list_of_dates을 교체하고 ordersinformation_source을 대체하고,이 계정에 조인 조건 조정 ... UP 주석 OP에 의해 밝혀 추가 정보를 기반으로 따르 날짜와 시간 비교하기

SELECT d.date 
    , IFNULL(SUM(s.quantity),0) AS quantity 
    FROM aux d 
    LEFT 
    JOIN orders s 
    ON s.date >= d.date 
    AND s.date < d.date + INTERVAL 1 DAY 
GROUP BY d.date 
+0

. . 나는 첫 번째 테이블에 날짜 목록이 없다는 것을 놓친 것 같습니다. –

+0

... @GordonLinoff : OP가 관측하고있는 행동을 일으키는 원인을 알리는 것은 불가능합니다. 내가 준 대답은 스파 스 데이터의 일반적인 문제에 대한 일반적인 접근법입니다. OP 예제에서 distinct_list_of_dates 행 소스는 참으로 'aux' 테이블이거나 인라인 뷰 (SELECT a.date FROM aux a GROUP BY a.date) 일 수 있습니다. 실제 사양이 없으면 그냥 추측하는 것입니다. (만약 OP 쿼리가'GROUP BY some_foo'를 수행한다면, 우리는 결과에서'date' 값들이 빠져 있기를 기대합니다. – spencer7593