从Postgres表纪元时间戳开始的最近7天

时间:2019-07-27 08:31:12

标签: postgresql

我有一个表(funny_quotes),该表具有名为quote_date的列,并且它以Unix纪元时间(秒)存储数据

我想运行查询以仅返回最近3天中该表中的数据(funny_quotes)。

我在postgres中本地创建了一个表,但是无法将日期存储为大纪元时间,只能将它们存储为时间戳记值

从funny_quotes中选择*,其中quote_date>(now()-间隔“ 3天”)

1 个答案:

答案 0 :(得分:1)

您应该将等式的右侧修改为epoch以便进行比较:

With tbl as (
    select * from (values 
        -- source data
         (0 ,  121,'Feb',100)
        ,(1 ,  121,'Jan',87 )
        ,(2 ,  121,'Mar',95 )
        ,(3 ,  121,'May',105)
        ,(4 ,  121,'Apr',100)
        ,(5 ,  321,'Jan',100)
        ,(6 ,  321,'Feb',87 )
        ,(7 ,  321,'Mar',95 )
        ,(8 ,  321,'Apr',105)
        ,(9 ,  321,'May',110)
        ,(10,  597,'Jan',100)
        ,(11,  597,'Feb',105)
        ,(12,  597,'Mar',95 )
        ,(13,  597,'Apr',100)
        ,(14,  597,'May',110)
    ) t(id, Seller_id, Months, Sales_amount)
), months as (
     select * from ( values
         (1, 'Jan')
        ,(2, 'Feb')
        ,(3, 'Mar')
        ,(4, 'Apr')
        ,(5, 'May')
        -- , etc
      ) t(id,name)
)
select * 
from (
    select t.*,
       lag(Sales_amount,1) over (partition by Seller_id order by m.id) m1,
       lag(Sales_amount,2) over (partition by Seller_id order by m.id) m2
    from tbl t
    join months  m on m.name=t.Months
) t
where Sales_amount > m1 and m1 > m2;

反之亦然:将select * from funny_quotes where quote_date > extract(epoch from (now() - interval '3 days')) 转换为时间戳:

quote_date

您可以详细了解in the docs