簡體   English   中英

Postgres 自加入多次

[英]Postgres self join multiple times

假設我們有這張表

No      Date                       Value
1       2018-02-20 12:00:00        200
1       2018-02-20 12:05:00        205
2       2018-02-20 12:00:00        205 
2       2018-02-20 12:05:00        200
3       2018-02-20 12:00:00        205
3       2018-02-20 12:05:00        210

我想創造這個

Date                   Value1      Value2       Value3
2018-02-20 12:00:00     200         205          205
2018-02-20 12:05:00     205         200          210

我怎樣才能創建這個? 自加入?

我試過這個

    select p1.VESSEL_NAME,p1.x_LocalTimeStamp_,p1.RealPowerTotal as   "KW1",p1.LF as "LF1",
p2.RealPowerTotal as "KW2",p2.LF as "LF2",
p3.RealPowerTotal as "KW3",p3.LF as "LF3" 
from Kwhmeters5min as p1 
where p1.x_DGNo_='1' and p1.x_LocalTimeStamp_>='2018-02-01 00:00:00' 
inner join Kwhmeters5min as p2 on p2.VESSEL_NAME=p1.VESSEL_NAME and p2.x_LocalTimeStamp_=p1.x_LocalTimeStamp_
where p2.x_DGNo_='2' 
inner join Kwhmeters5min as p3 on p3.VESSEL_NAME=p1.VESSEL_NAME and p3.x_LocalTimeStamp_=p1.x_LocalTimeStamp_
where p3.x_DGNo_='3' 

但我在“內部”附近出錯。

您不能在 where 語句后添加其他連接。 下面的查詢應該可以工作。

SELECT
p1.VESSEL_NAME,
p1.x_LocalTimeStamp_,
p1.RealPowerTotal AS "KW1",
p1.LF AS "LF1",
p2.RealPowerTotal AS "KW2",
p2.LF AS "LF2",
p3.RealPowerTotal AS "KW3",
p3.LF AS "LF3" 
FROM Kwhmeters5min AS p1 INNER JOIN Kwhmeters5min AS p2 ON p2.VESSEL_NAME = p1.VESSEL_NAME
AND p2.x_LocalTimeStamp_ = p1.x_LocalTimeStamp_
INNER JOIN Kwhmeters5min AS p3 ON p3.VESSEL_NAME = p1.VESSEL_NAME
AND p3.x_LocalTimeStamp_ = p1.x_LocalTimeStamp_
WHERE
    p3.x_DGNo_ = '1'
AND p1.x_DGNo_ = '2'
AND p2.x_DGNo_ = '3'
AND p1.x_LocalTimeStamp_ >= '2018-02-01 00:00:00'

假設您的表名為 public.tbl_test 我會在 postgres 中使用窗口函數以這種方式執行此操作:

select distinct on (public.tbl_test.date)
public.tbl_test.date,
nth_value(public.tbl_test.value,1 ) over (PARTITION by public.tbl_test.date order by public.tbl_test.no rows between unbounded preceding and unbounded following) as value1,
nth_value(public.tbl_test.value,2 ) over (PARTITION by public.tbl_test.date order by public.tbl_test.no rows between unbounded preceding and unbounded following) as value2,
nth_value(public.tbl_test.value,3 ) over (PARTITION by public.tbl_test.date order by public.tbl_test.no rows between unbounded preceding and unbounded following) as value3
from public.tbl_test

試試這個:通過 x_LocalTimeStamp_ 從 Kwhmeters5min 組中選擇 x_LocalTimeStamp_,array_agg(RealPowerTotal)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM