我正在为Postgresql使用Datagrip.我有一个表,带有时间戳格式为(ex: 2016-11-01 00:00:00)的日期字段.我希望能够:

  1. 应用数学运算符减go 1天
  2. 根据今天(130天)的时间窗口进行过滤
  3. 不显示邮票的hh/mm/ss部分(2016-10-31)

当前开始查询:

select org_id, count(accounts) as count, ((date_at) - 1) as dateat 
from sourcetable 
where  date_at <= now() - 130
group by org_id, dateat

第1行的((date_at)-1)条款导致:

[42883]错误:操作员不存在:没有时区的时间戳-

now()条款产生了类似的信息:

[42883]错误:操作员不存在:带有时区的时间戳-

在线的打字指导毫无帮助.感谢您的参与.

推荐答案

使用INTERVAL型来完成它.例如:

--yesterday
SELECT NOW() - INTERVAL '1 DAY';

--Unrelated: PostgreSQL also supports some interesting shortcuts:
SELECT 
    'yesterday'::TIMESTAMP, 
    'tomorrow'::TIMESTAMP, 
    'allballs'::TIME AS aka_midnight;

然后,您可以执行以下操作:

SELECT 
    org_id,
    count(accounts) AS COUNT,
    ((date_at) - INTERVAL '1 DAY') AS dateat
FROM 
    sourcetable
WHERE 
    date_at <= now() - INTERVAL '130 DAYS'
GROUP BY 
    org_id,
    dateat;

提示

提示1

可以附加多个操作数.E.g.: how to get last day of current month?

SELECT date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1 MONTH - 1 DAY';

提示2

您还可以使用make_interval函数创建一个间隔,这在需要在运行时创建它时非常有用(不使用文字):

SELECT make_interval(days => 10 + 2);
SELECT make_interval(days => 1, hours => 2);
SELECT make_interval(0, 1, 0, 5, 0, 0, 0.0);

更多信息:

Date/Time Functions and Operators

datatype-datetime (Especial values)

Sql相关问答推荐

PostgreSQL:获取每家店铺收入最高的员工

将有界时间周期作为阶跃函数,其中周期开始返回1,周期结束返回0

如何以"% m—% d"格式对生日列表进行排序,以查找与今天最近的日期?

Select 最大值,但当并列时,从其他列 Select 最大值

如何连接第二个表并将其内容输入到第一个表的单个字段中?

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

retrofit AWS Athena中的JSON

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

如何在postgres函数中插入后返回布尔值?

导出部分条形码字符串GS1-128

对多个条件的SQL进行排名

SQL中相同表内的VLOOKUP等价

将 json 列键映射到第二个表中的匹配列值

如何使用最后一个非 NULL 值在 PostgreSQL 列中填充 NULL 值

SQL Select 字母范围没有给我任何东西

基于 Snowflake 的最大值创建新列

获取 SQL Server 中每一行的两个-之间的文本

SQL Server 查找存在于所有不同时期(或序列)中的条目

如果 SQL 中不存在数据,如何根据某个 ID 为所有日期添加前一行

使用一组值进行分组和计数