我试图从查询中更新Redshift中的一个表:
update mr_usage_au au
inner join(select mr.UserId,
date(mr.ActionDate) as ActionDate,
count(case when mr.EventId in (32) then mr.UserId end) as Moods,
count(case when mr.EventId in (33) then mr.UserId end) as Activities,
sum(case when mr.EventId in (10) then mr.Duration end) as Duration
from mr_session_log mr
where mr.EventTime >= current_date - interval '1 days' and mr.EventTime < current_date
Group By mr.UserId,
date(mr.ActionDate)) slog on slog.UserId=au.UserId
and slog.ActionDate=au.Date
set au.Moods = slog.Moods,
au.Activities=slog.Activities,
au.Durarion=slog.Duration但我收到以下错误:
错误:在"au“或”au“附近的语法错误。
发布于 2015-08-27 14:43:05
对于Redshift (或Postgres)来说,这是完全无效的语法。让我想起了Server ..。
应该像这样工作(至少在当前的Postgres上):
UPDATE mr_usage_au
SET Moods = slog.Moods
, Activities = slog.Activities
, Durarion = slog.Duration
FROM (
select UserId
, ActionDate::date
, count(CASE WHEN EventId = 32 THEN UserId END) AS Moods
, count(CASE WHEN EventId = 33 THEN UserId END) AS Activities
, sum(CASE WHEN EventId = 10 THEN Duration END) AS Duration
FROM mr_session_log
WHERE EventTime >= current_date - 1 -- just subtract integer from a date
AND EventTime < current_date
GROUP BY UserId, ActionDate::date
) slog
WHERE slog.UserId = mr_usage_au.UserId
AND slog.ActionDate = mr_usage_au.Date;Postgres和Redshift的情况通常是这样的:
FROM子句连接其他表。SET子句中的目标列进行表限定.还有,红移是从PostgreSQL 8.0.2分叉的。,这是很久以前的事了。只应用了一些后来对Postgres的更新。
我简化了其他一些细节。
https://stackoverflow.com/questions/32251130
复制相似问题