Sql 最新时间戳的相对时间(子查询)

Sql 最新时间戳的相对时间(子查询),sql,amazon-athena,Sql,Amazon Athena,我在雅典娜的桌子今天晚了一个星期,但它一直在赶上来 因此,我想创建一个查询,在最新时间戳前一周为我提供所有会话 我有类似的东西,但不起作用 SELECT app_id, env, count(distinct session_id) as num_of_sessions, from_unixtime(timestamp/1000) as ts FROM "sessions" where env='demo' and date(from_unixtime(timestamp/

我在雅典娜的桌子今天晚了一个星期,但它一直在赶上来 因此,我想创建一个查询,在最新时间戳前一周为我提供所有会话 我有类似的东西,但不起作用

SELECT app_id, env, count(distinct session_id) as num_of_sessions, from_unixtime(timestamp/1000) as ts
FROM "sessions" 
where env='demo' and date(from_unixtime(timestamp/1000))>date_add('week', -1, (SELECT max(timestamp) FROM "sessions" where env='demo' limit 1))
group by app_id, env, from_unixtime(timestamp/1000)
order by from_unixtime(timestamp/1000)
我得到的错误是

Error running query: SYNTAX_ERROR: line 3:58: Unexpected parameters (varchar(4), integer, bigint) for function date_add. Expected: date_add(varchar(x), bigint, date) , date_add(varchar(x), bigint, time) , date_add(varchar(x), bigint, time with time zone) , date_add(varchar(x), bigint, timestamp) , date_add(varchar(x), bigint, timestamp with time zone)

我从未在查询中执行过查询,所以这可能是问题所在,但我无法理解为什么错误非常明显

就我所见,表sessions中的列
timestamp
是type
bigint
。事实上,它代表一个unix时间戳,这就是为什么您要从unixtime(timestamp/1000)执行

但是在给出错误的
date\u add
函数中,您只需执行仍然是bigint类型的
max(timestamp)

date\u add
func需要第三个参数作为
time
或date
type
,因此您必须像以前一样强制转换它,因此:

date_add('week', -1, (
   SELECT from_unixtime(max(timestamp) / 1000) 
   FROM "sessions" 
   WHERE env='demo' limit 1)
)