从去年获得数字

时间:2017-03-20 16:34:14

标签: sql postgresql

我查看了有关postgreSQL中time元素的帖子,但是到目前为止他们还没有点击过我。我希望得到Last Year to Date,在这种情况下2016年1月1日至2016年3月20日和Last Year Month to Date,在这种情况下,2016年1月3日至2016年3月3日。

Get last 12 months data from Db with year in Postgres

get last three month records from table

select actual_sale_date from allsalesdata
where actual_sale_date > date_trunc('year', current_date)

提供2017年年初至今

select actual_sale_date from allsalesdata
where actual_sale_date > date_trunc('month', current_date)

提供2017年的月度

select actual_sale_date from allsalesdata
where actual_sale_date >= date_trunc('year', now() - interval '1 year')         
and actual_sale_date < date_trunc('year',now())

提供从01/01开始的去年----&gt; 12/31数据。

我可以在上面的代码段中添加哪些内容,这些代码段将为我提供去年至今和去年的月初数据。请提供帮助。

2 个答案:

答案 0 :(得分:2)

这个怎么样?

select actual_sale_date 
from allsalesdata
where actual_sale_date + interval '1' year >= date_trunc('year', current_date) and
      actual_sale_date + interval '1' year < current_date

也就是说,在去年的日期添加一年,并与今年相比。我建议添加一年并使用年份的日期。这更直观地处理闰年(在我看来)。

答案 1 :(得分:2)

您的公式很难遵循。您需要构造将actual_sale_date与一个日期和另一个日期相结合的查询。这样:

上一年的开始:

t=# select date_trunc('year', now() - interval '1 year');
       date_trunc
------------------------
 2016-01-01 00:00:00+00
(1 row)

当天开始:

t=# select date_trunc('day', now());
       date_trunc
------------------------
 2017-03-20 00:00:00+00
(1 row)

上一年当月的开始:

t=# select date_trunc('month', (now() - interval '1 year'));
       date_trunc
------------------------
 2016-03-01 00:00:00+00
(1 row)

因此,如果&#34;去年月初数据&#34;指从2016年3月第一个到现在:

select actual_sale_date from allsalesdata
where actual_sale_date >= date_trunc('month', (now() - interval '1 year'))       
and actual_sale_date <= now()