我有一个名为signal的表,其中有以下列
输入表:
| entity_id | item_id | month_id | signal_count |
101 3 2015 2
104 4 2017 1
101 1 2017 1
104 2 2016 0
107 2 2011 1
107 0 2011 2
我需要signal_count和item_id的总和为oldest_item_id和newest_item_id(基于month_id并按实体ID分组)
和month_id相同,则取item_id的最小值
预期结果如下:
| entity_id | oldest_item_id | newest_month_id | signal_count |
101 3 1 3
104 2 4 1
107 0 0 3
答案 0 :(得分:1)
根据所需的month_id顺序,使用<script src=somecode/js/chunk-vendors.40fba41b.js>
窗口函数获取每个entity_id的总和,并使用sum
获得最旧和最新的item_id。
first_value
要打破平局并获得最少的item_id,以防每个实体_id中有多个具有相同month_id的行,请在select distinct entity_id,oldest_item_id,newest_item_id,signal_count_sum
from (select t.*
,sum(signal_count) over(partition by entity_id) as signal_sum
,first_value(item_id) over(partition by entity_id order by month_id) as oldest_item_id
,first_value(item_id) over(partition by entity_id order by month_id desc) as newest_item_id
from tbl t
) t
规范中将item_id
添加到order by
。
rows