0

Ich verwende filled_months, um leere Monate einzufügen und Daten nach Monaten zu gruppieren. Das Problem ist, ich kann nicht scheinen es funktioniert für die Abfrage teilweise Monate (z. B. 2016-09-01 bis 2016-09-15), es zählt immer den vollen Monat. Kann mir jemand in die richtige Richtung zeigen?Wie kann ich generate_series für einen Teil eines Monats arbeiten lassen?

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

Die Frage ist nicht klar. –

Antwort

0

Wenn ich Ihr Dilemma richtig verstehe, denke ich nicht, dass Sie sogar die Generate-Serie hier benötigen. Ich denke, dass Sie mit einem between erhalten, indem in Ihrer where-Klausel und lassen Sie die Gruppierung in SQL um den Rest:

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 

ich dies mit Daten auf drei Datensätze geprüft, 9/1/16, 9/15/16 und 9/30/16, und es gab eine Zählung von zwei. Als ich den Bereich auf 9/30 erweiterte, gab es richtig drei.

HAFTUNGSAUSSCHLUSS: Ich habe nicht verstanden, was das bedeutete:

places.id IS NULL OR restaurants.id IS NULL 

Wenn dies nicht funktioniert, dann können Sie vielleicht einige Beispieldaten zu Ihrer Frage hinzufügen, zusammen mit einigen erwarteten Ergebnissen.

Verwandte Themen