使用过滤器获取分区数据的最小值和最大值
Obtaining min and max of partitioned data with a filter
我刚刚在查询中发现了这个问题:(抱歉,我会尽量简化 table 定义并缩短详细信息。如果您需要更多,请告诉我)。
我有 table 和 (ID, date, status)
。 ID
是 FK,date
是日期,status
是介于 1
和 5
之间的 int 值。 date
和 status
都允许空值。也允许重复值。
我需要的:
为状态为 1
或 2
、status
为 2
的每个 ID
、min(date)
提取一行(仅),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
所以,问题是:这是正确的吗?我怎样才能 select 只有我想要的 status
?
如果我对你的问题的理解正确,那么你不需要解析函数。您只需要条件聚合:
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
我刚刚在查询中发现了这个问题:(抱歉,我会尽量简化 table 定义并缩短详细信息。如果您需要更多,请告诉我)。
我有 table 和 (ID, date, status)
。 ID
是 FK,date
是日期,status
是介于 1
和 5
之间的 int 值。 date
和 status
都允许空值。也允许重复值。
我需要的:
为状态为 1
或 2
、status
为 2
的每个 ID
、min(date)
提取一行(仅),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
所以,问题是:这是正确的吗?我怎样才能 select 只有我想要的 status
?
如果我对你的问题的理解正确,那么你不需要解析函数。您只需要条件聚合:
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