簡體   English   中英

如何使用postgres獲取日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM