有没有一种方法可以基于Max(date)在postgres中获取组的第一行

输入:

id      name        value1      value2        date

1        A              1           1       2019-01-01
1        A              2           2       2019-02-15
1        A              3           3       2019-01-15
1        A              1           1       2019-07-13

2        B              1           2       2019-01-01
2        B              1           3       2019-02-15
2        B              2           1       2019-07-13

3        C              2           4       2019-02-15
3        C              1           2       2019-01-01
3        C              1           9       2019-07-13
3        C              3           1       2019-02-15

预期输出:

id      name        value1      value2        date

1        A              1    Avg(value2)    2019-07-13
2        B              2    Avg(value2)    2019-07-13
3        C              1    Avg(value2)    2019-07-13
peng3817 回答:有没有一种方法可以基于Max(date)在postgres中获取组的第一行

您可以使用窗口功能。 (decltype(x))::operator foo()可用于标识每个组中的第一条记录,rank() over()将为您提供每个组中avg() over()的窗口平均值:

value2
,

以正确的方式对数据进行排序,使用窗口函数row_number()作为标识符,然后选择每个分区的第一项。

    with temp_data as 
    (
    select
    row_number() over (partition by debug.tbl_data.id order by debug.tbl_data.date desc) as index,*,avg(debug.tbl_data.value2)over (partition by debug.tbl_data.id) as data_avg
    from debug.tbl_data 
    order by id asc,debug.tbl_data.date desc
    )

    select 
    *
    from temp_data
    where index = 1
,

您似乎想要最value1的值。在统计中,这称为“模式”。您可以按照以下方式进行操作:

select id,name,mode() within group (order by value1) as value1_mode,avg(value2),max(date)
from t
group by id,name;
本文链接:https://www.f2er.com/3066781.html

大家都在问