在WHERE子句中选择最短日期

时间:2019-04-23 09:07:49

标签: postgresql superset apache-superset

从PostgreSQL的角度来看: 我有一个数据集,该数据集由指标值,时间戳和标志来表示指标值是属于基线期还是随访期。

我想从基线期中选择所有行,并从随访期中选择第一行。我无法在WHERE子句中使用MIN(date),而且并不是在所有情况下跟踪期总是始于同一日期。

有没有办法做类似WHERE type = 'baseline' OR (type = 'fol' AND date <= MIN(date))的事情?

从超集角度看: 我正在使用“注释层”突出显示代表基线期间的指标线部分。然后,我用不同的颜色突出显示后续阶段。我需要确保突出显示是连续的(现在基线最后日期和后续最后日期之间的线段未突出显示)。因此,我需要对基线突出显示注释层下面的图表应用过滤器,以返回基线期间和首次随访日期的数据。

2 个答案:

答案 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)

我没有运行这些查询