[英]how to get dates with postgres
我試圖查詢並返回過去 4 周內所有記錄的總和。 我讓它工作但是我在使用時間戳時。 我正在嘗試更改精度並且只使用日期。
簡單地而不是時間戳范圍,我只想要日期范圍。
這就是我對時間戳的看法。
with date_ranges (range_name, range_dates) as
( values ('week_0', tstzrange ((now()-interval '6 days'), now(),'[]'))
, ('week_1', tstzrange ((now()-interval '13 days'), (now()-interval '7 days'), '[]'))
, ('week_2', tstzrange ((now()-interval '20 days'), (now()-interval '14 days'),'[]'))
, ('week_3', tstzrange ((now()-interval '27 days'), (now()-interval '21 days'),'[]'))
)
select range_name, range_dates, sum("transactionTotal") total_amount
from "MoneyTransactions" mt
join date_ranges dr on (mt."createdAt" <@ range_dates)
group by range_name, range_dates
order by range_name;
我嘗試使用daterange
更改tstzrange
,但出現以下錯誤
函數日期范圍(帶時區的時間戳,帶時區的時間戳,未知)不存在
我對 SQL 沒有太多的背景,所以非常感謝一個小小的解釋。
你會簡單地投射到日期。 但是,這樣做時要小心。 您應該沿獨占(默認上限)使用 7 的倍數。 因此它看起來像:
with date_ranges (range_name, range_dates) as
( values ('week_0', tstzrange ((now()::date-interval '7 days'), now()::date))
, ('week_1', tstzrange ((now()::date-interval '14 days'), (now()::date-interval '7 days')))
, ('week_2', tstzrange ((now()::date-interval '21 days'), (now()::date-interval '14 days')))
, ('week_3', tstzrange ((now()::date-interval '28 days'), (now()::date-interval '21 days')))
)
select range_name, range_dates, sum("transactionTotal") total_amount
from "MoneyTransactions" mt
join date_ranges dr on (mt."createdAt" <@ range_dates)
group by range_name, range_dates
order by range_name;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.