2017-06-20 28 views
0

計數下面是該查詢盤點記錄,通過間隔

WITH dates AS (
    SELECT current_date - serie AS date 
    FROM generate_series(0, 365, 1) AS serie 
), items AS (
    SELECT * 
    FROM items 
    WHERE created_at BETWEEN now() - interval '6 months' AND now() 
) 

SELECT dates.date, count(items) 
FROM dates 
LEFT OUTER JOIN items ON items.created_at::date = dates.date 
GROUP BY dates.date 

一切工作正常,除了一兩件事 - 我需要以某種方式與天連續更換now()。 因此,對於每一天計算項目計數與基於當天的條件。 只是不能引用它。

有沒有解決方案?

+0

與一天中哪一行?請使用cte別名和列名 –

+0

@VaoTsun對不起,'dates.date' –

+0

如果你想在物品cte中引用dates.date - 你必須加入它我認爲 –

回答

0

不是這樣嗎?

WITH dates AS (
    SELECT current_date - serie AS date 
    FROM generate_series(0, 365, 1) AS serie 
) 
SELECT dates.date, count(items) 
FROM dates 
LEFT OUTER JOIN items ON created_at BETWEEN dates.date- interval '6 months' AND dates.date 
GROUP BY dates.date; 
+0

來與相同的解決方案) 請編輯答案:刪除'items.created_at :: date = dates.date和'它不會被這個條件計數。 –

+0

謝謝!更新 –

0

我來到了以下解決方案,它具有相同的結果維羅樽建議:

WITH dates AS (
    SELECT current_date - serie AS date 
    FROM generate_series(0, 365, 1) AS serie 
), date_intervals AS (
    SELECT 
     (dates.date - INTERVAL '6 months') AS start_date, 
     dates.date       AS end_date 
    FROM dates 
) 

SELECT date_intervals.end_date, count(items) 
FROM date_intervals 
    LEFT OUTER JOIN items ON items.created_at BETWEEN date_intervals.start_date AND date_intervals.end_date 
GROUP BY 1 
ORDER BY 1