Postgres自我加入多次

问题描述 投票:-1回答:3

假设我们有这张桌子

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' 

但我在“内心”附近得到错误。

sql postgresql self-join
3个回答
0
投票

假设您的表名为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

0
投票

您无法在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'

0
投票

试试这个:从xwhocalTimeStamp_中选择Kwhmeters5min组的x_LocalTimeStamp_,array_agg(RealPowerTotal)

© www.soinside.com 2019 - 2024. All rights reserved.