【问题标题】:athena - using max function for each column dataathena - 对每列数据使用 max 函数
【发布时间】:2021-07-06 16:23:24
【问题描述】:

是否有任何方法可以根据列上的信息使用函数? 我有一个名为 env 的列,它有两种类型的数据,即“eu”或“us” 而且我还有一列时间戳。我需要一种方法来通过单个查询显示每列中每个 env 的最大时间戳。

有没有办法做这样的事情?

我的桌子:

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

我想要什么

max_eu_ts        max_us_ts
1617580800000    1617570800000

【问题讨论】:

  • 请以文本格式分享您的示例输入和所需的输出。
  • @KaziMohammadAliNur 添加了一个示例
  • 现在很清楚了。我已经添加了答案。

标签: sql max amazon-athena presto


【解决方案1】:

你只是在找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;

【讨论】:

  • 感谢您的回复,但遗憾的是这不是我需要的。我添加了一个示例。
  • 获取两行和获取两列有什么区别?你可以转置答案。
【解决方案2】:

那么你只需要使用max(timestamp)。一个用于eu,另一个用于us。 使用case when 语句,您只能从env 列中具有us 的行中选择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

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    相关资源
    最近更新 更多