0

채워진 개월을 채우기 위해 채워진 월을 사용하고 개월 단위로 데이터를 그룹화합니다. 문제는 일부 달 (예 : 2016-09-01에서 2016-09-15)을 쿼리하는 데 사용할 수없는 것 같습니다. 항상 전체 월을 계산합니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까?한 달 동안 generate_series를 작동 시키려면 어떻게해야합니까?

with filled_months AS 
    (SELECT 
    month, 
      0 AS blank_count 
    FROM generate_series(date_trunc('month',date('2016-09-01')), date_trunc('month',date('2016-09-15')), '1 month') AS 
    month) 
SELECT to_char(mnth.month, 'YYYY Mon') AS month_year, 
     count(distinct places.id) 
FROM filled_months mnth 
left outer join restaurants 
    ON date_trunc('month', restaurants.created_at) = mnth.month 
left outer join places 
    ON restaurants.places_id = places.id 
WHERE places.id IS NULL OR restaurants.id IS NULL 
GROUP BY mnth.month 
ORDER BY mnth.month 
+3

질문이 명확하지 않습니다. –

답변

0

내가 당신의 곤란을 정확하게 이해한다면, 여기에 시리즈를 생성 할 필요조차 없다고 생각합니다.

SELECT 
    to_char(r.created_at, 'YYYY Mon') AS month, 
    count(distinct p.id) 
FROM 
    restaurants r 
    left join places p ON r.places_id = p.id 
WHERE 
    r.created_at between '2016-09-01' and '2016-09-15' 
GROUP BY month 
ORDER BY month 

내가 날짜와 세 개의 레코드에서이 테스트, 9/1/16, 9/15/16 : 나는 당신이 당신의 where 절에 between에 의해 얻을 SQL의 그룹이 나머지를 처리 ​​할 수 ​​있다고 생각 그리고 9/30/16, 그리고 그것은 2의 카운트를 줬다. 범위를 9/30으로 확장했을 때 정확하게 3을주었습니다.

면책 조항 :이 작동하지 않는 경우,

places.id IS NULL OR restaurants.id IS NULL 

을 아마도 당신은 몇 가지 예상 결과와 함께, 귀하의 질문에 일부 샘플 데이터를 추가 할 수 있습니다 :이 무엇을 의미하는지 이해하지 못했다.

관련 문제