我正在嘗試進行類似時間序列的報告,為此,我正在使用 Postgres DATA_TRUNC 函式,它作業正常并且我得到了預期的輸出,但是當特定間隔沒有記錄時,它會被跳過顯示,但我的預期輸出是以 0 作為計數來獲得間隔,下面是我現在的查詢。我應該做些什么改變來獲得沒有資料的區間?提前致謝。
SELECT date_trunc('days', sent_at), count('*')
FROM (select * from invoice
WHERE supplier = 'ABC' and sent_at BETWEEN '2021-12-01' AND '2022-07-31') as inv
GROUP BY date_trunc('days', sent_at)
ORDER BY date_trunc('days', sent_at);
預期:如下所示,當前輸出現在顯示 02/12 和 07/12,中間跳過了日期,但對我來說,它也應該顯示 03/12、04/12、05/12 和計為 0
電流輸出

uj5u.com熱心網友回復:
您的資料中似乎沒有這些日期,在這種情況下,您需要生成它們。此外,將您的時間戳轉換為日期而不是date_trunc()可以擺脫那些零。
SELECT dates::date, count(*) filter (where sent_at is not null)
FROM (
select *
from invoice a
right join generate_series( '2021-12-01'::date,
'2021-12-31'::date,
'1 day'::interval ) as b(dates)
on sent_at::date=b.dates) as inv
GROUP BY 1
ORDER BY 1;
這是一個作業示例。另外,請嘗試根據@nbk的評論改進您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/518378.html
