从PostgreSQL的角度来看: 我有一个数据集,该数据集由指标值,时间戳和标志来表示指标值是属于基线期还是随访期。
我想从基线期中选择所有行,并从随访期中选择第一行。我无法在WHERE子句中使用MIN(date),而且并不是在所有情况下跟踪期总是始于同一日期。
有没有办法做类似WHERE type = 'baseline' OR (type = 'fol' AND date <= MIN(date))
的事情?
从超集角度看: 我正在使用“注释层”突出显示代表基线期间的指标线部分。然后,我用不同的颜色突出显示后续阶段。我需要确保突出显示是连续的(现在基线最后日期和后续最后日期之间的线段未突出显示)。因此,我需要对基线突出显示注释层下面的图表应用过滤器,以返回基线期间和首次随访日期的数据。
答案 0 :(得分:1)
您不能在WERE子句中使用Aggregate函数。改用子查询
... WHERE type = 'baseline' OR (type = 'fol' AND date <= (SELECT MIN(data) FROM ... WHERE type = 'baseline') )
答案 1 :(得分:1)
有几种方法可以做到这一点:
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)
我没有运行这些查询