0

SQL言語としてPostgreSQLを使用するAWS redshiftを使用しています。データを非正規化して単一の行にするクエリを作成する際に、助けが必要です。

私のスキーマ

Milestone
  -ItemId
  -LocationType //mapped to enum X, Y, Z
  -EventTime

マイルストーンには、場所 X、Y、または Z の 3 つのタイプがあります。これを 1 つの行に非正規化したいと考えています。

ItemId EventTime_X EventTime_Y EventTime_Z

私はこのようなことを試しましたが、実行するのに永遠に時間がかかります。

select x.itemId, X.eventTime as EventTime_X, Y.eventTime as EventTime_Y, z.eventTime as EventTime_Z
from (select * from milestone where LocationType = 'X') as X
left outer join (select * from milestone where LocationType = 'Y') as Y on x.itemId=y.itemId
left outer join (select * from milestone where LocationType = 'Z') as Z on x.itemId=z.itemId
4

1 に答える 1

1

X、Y、Z に 1 つのマイルストーンがあると仮定すると、条件付き集計でこれを行うことができます。

select m.itemId,
       max(case when m.LocationType = 'X' then eventTime end) as eventTime_X,
       max(case when m.LocationType = 'Y' then eventTime end) as eventTime_Y,
       max(case when m.LocationType = 'Z' then eventTime end) as eventTime_Z
from Milestone m
where LocationType in ('X', 'Y', 'Z')
group by m.itemId;
于 2013-09-17T03:16:51.953 に答える