从亚马逊红移中选择最大嵌套 ID

Posted

技术标签:

【中文标题】从亚马逊红移中选择最大嵌套 ID【英文标题】:Select max of nested id from amazon redshift 【发布时间】:2021-09-20 23:17:04 【问题描述】:

我的数据库是亚马逊红移。

我有一张像这样的表 -

id nested_id date value
1 10 '2021-01-01' 5
1 20 '2021-01-01' 10
1 10 '2021-01-02' 6
1 20 '2021-01-02' 11
1 10 '2021-01-03' 7
1 20 '2021-01-03' 12
2 30 '2021-01-01' 5
2 40 '2021-01-01' 10
2 30 '2021-01-02' 6
2 40 '2021-01-02' 11
2 30 '2021-01-03' 7
2 40 '2021-01-03' 12

所以这基本上是一个按 id 随时间跟踪值的表,除了每个 id 都可以有一个nested_id。并且日期和值主要连接到nested_id。

但是,假设我从 id 字段开始,但对于每个 id,我只想随时间返回点数总和较大的 nested_id 的点数。

所以现在我只是这样抓住它......

select *
from mytable
where id in (1, 2)

除了我只希望它返回 nested_id 行,其中该 nested_id 的最大 value 是最大的。

以下是我手动执行此操作的方法。

对于 1 的 id,最大值为 12,该值的 nested_id20 对于2的id,最大值为12,该值的nested_id40

所以我的退货表应该是

id nested_id date value
1 20 '2021-01-01' 10
1 20 '2021-01-02' 11
1 20 '2021-01-03' 12
2 40 '2021-01-01' 10
2 40 '2021-01-02' 11
2 40 '2021-01-03' 12

有没有一种简单的方法来执行这个查询?我假设您必须以某种方式进行分区?

【问题讨论】:

【参考方案1】:

你可以用row_numberwindow functions解决这个问题

with maxs as (
    select id, 
           nested_id, 
           value, 
           row_number() over (partition by id order by value desc) rn
    from mytable
)
select mt.*
from mytable mt
    left join maxs on mt.id = maxs.id and mt.nested_id = maxs.nested_id
where maxs.rn = 1

【讨论】:

以上是关于从亚马逊红移中选择最大嵌套 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何从亚马逊红移中的字符串中删除非数字字符(句号“。”除外)

亚马逊红移中的上次更新查询计数

使用字符串函数反序列化亚马逊红移中的 php 对象

亚马逊红移中的 SQL 正则表达式 substr 函数

如何将oracle sql复制到亚马逊redshift

从 R 连接到亚马逊红移时出错 - Windows 10