从PostgreSQL的角度来看:我有一个数据集,它包含指标值,时间戳和一个标志,用于表示指标值是否与基线或后续期有关。
我想选择基线期间的所有行和后续期间的第一行。我无法在WHERE子句中使用MIN(日期),并且并非后续时间段始终在所有情况下都在同一天开始。
有没有办法可以做像WHERE type = 'baseline' OR (type = 'fol' AND date <= MIN(date))
这样的事情?
从Superset的角度来看:我正在使用注释层来突出显示代表基线周期的指标线部分。然后我用不同的颜色突出显示后续时期。我需要确保突出显示是连续的(现在基线上一个日期和后续最后一个日期之间的线段没有突出显示)。因此,我需要将过滤器应用于基线突出显示注释层的基础图表,该图层返回基准期和第一个后续日期的数据。
您不能在WERE子句中使用Aggregate函数。请改用子查询
... 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答案中计算子查询中的日期
3)使用窗口函数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)
我没有运行这些查询