我有下表:
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条件的要求变得更加复杂(即:多列条件),我将需要创建多个哑列
答案 0 :(得分:1)
您可以使用*
:
lag()