使用过滤器获取分区数据的最小值和最大值

Posted

技术标签:

【中文标题】使用过滤器获取分区数据的最小值和最大值【英文标题】:Obtaining min and max of partitioned data with a filter 【发布时间】:2016-09-28 09:49:52 【问题描述】:

我刚刚在查询中发现了这个问题:(对不起,我会尽量简化表定义并缩短细节。如果您需要更多,请告诉我)。

我有一张(ID, date, status) 的桌子。 ID 是 FK,date 是日期,status 是介于 15 之间的 int 值。 datestatus 都允许空值。也允许重复值。

我需要什么: 为每个IDmin(date) 提取一行,状态为12min(date)status2(仅限),max(status)...

我完全迷失了......我正在尝试使用

SELECT
   ID,
   min(date) over (partition by(status)) ?? as min_12_date,
   min(date) over (partition by(status)) ?? as min_2_date,
   max(status) as max_status
FROM table
group by ID

所以,问题是:这是正确的吗?如何只选择我想要的status

【问题讨论】:

【参考方案1】:

如果我正确理解您的问题,您不需要分析函数。你只需要条件聚合:

select id,
       min(case when status in (1, 2) then date end) as min_12_date,
       min(case when status = 2 then date end) as min_2_date,
       max(status) as max_status
  from tbl
 group by id

【讨论】:

以上是关于使用过滤器获取分区数据的最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NSString/String 数组中获取最小值和最大值?

从Awk中的多维数组中的子数组获取最小值和最大值

Pyspark - 从具有最小值和最大值范围的数组中获取值

从变量中获取最小值和最大值的正确方法

从 pyspark 数据框中获取多个(100+)列的空计数、最小值和最大值的最佳方法

如何选择数据表中列的最小值和最大值?