使用过滤器获取分区数据的最小值和最大值
Posted
技术标签:
【中文标题】使用过滤器获取分区数据的最小值和最大值【英文标题】:Obtaining min and max of partitioned data with a filter 【发布时间】:2016-09-28 09:49:52 【问题描述】:我刚刚在查询中发现了这个问题:(对不起,我会尽量简化表定义并缩短细节。如果您需要更多,请告诉我)。
我有一张(ID, date, status)
的桌子。 ID
是 FK,date
是日期,status
是介于 1
和 5
之间的 int 值。 date
和 status
都允许空值。也允许重复值。
我需要什么:
为每个ID
、min(date)
提取一行,状态为1
或2
,min(date)
的status
为2
(仅限),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 数组中获取最小值和最大值?