从亚马逊红移中选择最大嵌套 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_id
为 20
对于2的id
,最大值为12,该值的nested_id
为40
所以我的退货表应该是
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_number
window 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的主要内容,如果未能解决你的问题,请参考以下文章