SQL-选择一个满足条件的周围记录

时间:2019-03-08 05:05:25

标签: sql window-functions amazon-athena presto

我有下表:

epochTime,id,counter1,value
123,Alpha,2,2
124,Beta,0,3
135,Alpha,0,1
112,Alpha,0,5
150,Alpha,0,-1
225,Beta,1,2
228,Beta,1,0
300,Beta,0,2

我要选择counter1> 0的所有记录,然后选择记录,然后按id和epochTime的顺序进行分区(与Unix“ grep -A 1”命令相似) 因此,上述数据的预期结果将是

epochTime      id    counter1       value
      123   Alpha           2           2
      135   Alpha           0           1
      225    Beta           1           2
      228    Beta           1           0
      300    Beta           0           2

我正在使用AWS Athena,并获得了以下查询,该查询可以正常工作。

SELECT * FROM (
    SELECT id,
        epochTime,
        counter1,
        value,
        first_value(counter1) OVER (
            PARTITION BY id
            ORDER BY epochTime
            ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
        ) AS preCounter
    FROM testsql
) WHERE counter1 > 0 OR preCounter > 0   

但是,我发现查询有两个问题:

  • 这是一个嵌套查询
  • 我需要创建一个虚拟列(preCounter)。如果对WHERE条件的要求变得更加复杂(即:多列条件),我将需要创建多个哑列

    1. 是否有更好的解决方案(性能更好,查询更简单……)?
    2. 如果counter1是我需要选择的以下记录数怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用*

lag()