在Vertica中加入最后一个上一行的日期

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

我想获得表B中表A中事件发生日期的当前状态。

Table A
Person: Date:       Event
Bob     2020-01-05  Party

Table B
Person:  Date: Status
Bob      2020-01-08     Awake 
Bob      2020-01-03     Dinner
Bob      2020-01-01     Cycling

所以正确的结果将是

Bob     2020-01-05  Party Dinner

我尝试了此操作,但收到错误消息'不支持不带聚集且具有限制的相关子查询表达式'。

SELECT 
    A.Person, 
    A.Date, 
    A.Event,
    (
        SELECT Status FROM B
        WHERE A.Person = B.Person AND B.Date <= A.Date
        ORDER BY B.Date desc
        LIMIT 1
    ) AS Status
FROM A

有人可以告诉我该怎么办吗?我尝试了其他一些想法,但仍然遇到其他错误。

sql date join vertica
1个回答
0
投票

如果只需要一个人的结果,则可以排序和限制:

select
    a.person,
    a.date,
    a.event,
    b.status
from tablea a
inner join tableb b on b.person = a.person
where a.person = 'Bob'
order by b.date desc
limit 1

如果您想一次处理一个以上的人,则可以使用窗口功能:

select *
from (
    select
        a.person,
        a.date,
        a.event,
        b.status,
        row_number() over(partition by a.person order by b.date desc) rn
    from tablea a
    inner join tableb b on b.person = a.person
) t
where rn = 1
© www.soinside.com 2019 - 2024. All rights reserved.