athena - 对每列数据使用 max 函数

athena - using max function for each column data

有什么方法可以根据列上的信息使用一个函数吗? 我有一个名为 env 的列,它有两种类型的数据,即 'eu' 或 'us' 我还有一列时间戳。我需要一种方法来通过单个查询在每列中显示每个环境的最大时间戳。

有什么办法可以做到这一点吗?

我的table:

session                             timestamp       env
4753f3feb27087c8f4c4bd79ad5cff55    1617570800000   US
5f08a8b6347ac27d93a6ea2f42f090b5    1617560800000   EU
bcab7e0a9f0af4b2e9cde11d36dc2e8a    1617580800000   EU
bcab7e0a9f0af4b2e9cde11d36dc2e8a    1617520800000   US

我想要什么

max_eu_ts        max_us_ts
1617580800000    1617570800000

你只是在找group by?

select env, max(timestamp)
from t
group by env;

或者,如果您想要完整的行,请使用 row_number():

select t.*
from (select t.*,
             row_number() over (partition by env order by timestamp desc) as seqnum
      from t
     ) t
where seqnum = 1;

那么你只需要使用max(timestamp)。一个用于 eu,另一个用于 us。 使用 case when 语句,您只能从 env 列中具有 us 的行中 select max(timestamp) 来计算 max_us_ts。 max_eu_ts.

相同
select 
max(case when env='eu'then timestamp end) max_eu_ts ,
max(case when env='us' then timestamp end) max_us_ts    
from mytable