Select WHERE 子句中的最短日期
Select Minimum Date within WHERE Clause
从 PostgreSQL 的角度来看:
我有一个数据集,其中包含指标值、时间戳和一个标志,用于指示指标值是否属于基线或跟进期。
我想 select 基线期的所有行和后续期的第一行。我无法在 WHERE 子句中使用 MIN(date),而且并不是说在所有情况下跟进期总是在同一日期开始。
有什么方法可以让我做类似WHERE type = 'baseline' OR (type = 'fol' AND date <= MIN(date))
的事情吗?
从超集的角度来看:
我正在使用注释层来突出显示表示基线周期的指示线部分。然后我用不同的颜色突出显示后续阶段。我需要确保突出显示是连续的(现在基线最后日期和后续最后日期之间的线段未突出显示)。因此,我需要对基线下的图表应用过滤器突出显示注释层,该层 returns 基线期和第一个后续日期的数据。
您不能在 WERE 子句中使用聚合函数。使用子查询代替
... WHERE type = 'baseline' OR (type = 'fol' AND date <= (SELECT MIN(data) FROM ... WHERE type = 'baseline') )
据我所知,有几种方法可以做到这一点:
1) 使用 UNION 有两个单独的查询
select <Query> where type = 'baseline'
UNION ALL
select <Query> where type = 'fol' order by date limit 1
2) 使用您编写的 where 子句,但在子查询中计算日期,如@Kushal Arya answer
3) 使用window-函数ROW_NUMBER
select
<Query>,
ROW_NUMBER() over (partition by type
order by date) as row_num
where
type = 'baseline' OR
(type = 'fol' AND row_num = 1)
我没有运行这些查询
从 PostgreSQL 的角度来看: 我有一个数据集,其中包含指标值、时间戳和一个标志,用于指示指标值是否属于基线或跟进期。
我想 select 基线期的所有行和后续期的第一行。我无法在 WHERE 子句中使用 MIN(date),而且并不是说在所有情况下跟进期总是在同一日期开始。
有什么方法可以让我做类似WHERE type = 'baseline' OR (type = 'fol' AND date <= MIN(date))
的事情吗?
从超集的角度来看: 我正在使用注释层来突出显示表示基线周期的指示线部分。然后我用不同的颜色突出显示后续阶段。我需要确保突出显示是连续的(现在基线最后日期和后续最后日期之间的线段未突出显示)。因此,我需要对基线下的图表应用过滤器突出显示注释层,该层 returns 基线期和第一个后续日期的数据。
您不能在 WERE 子句中使用聚合函数。使用子查询代替
... WHERE type = 'baseline' OR (type = 'fol' AND date <= (SELECT MIN(data) FROM ... WHERE type = 'baseline') )
据我所知,有几种方法可以做到这一点:
1) 使用 UNION 有两个单独的查询
select <Query> where type = 'baseline'
UNION ALL
select <Query> where type = 'fol' order by date limit 1
2) 使用您编写的 where 子句,但在子查询中计算日期,如@Kushal Arya answer
3) 使用window-函数ROW_NUMBER
select
<Query>,
ROW_NUMBER() over (partition by type
order by date) as row_num
where
type = 'baseline' OR
(type = 'fol' AND row_num = 1)
我没有运行这些查询