SQL (Presto): Return x 之和等于某个阈值的日期

SQL (Presto): Return Date when Sum of x equals some threshold

我有一个 table 下面的那个。我想 return 结果总和不等于 'na' 等于 4

的日期
Date ID Result
12-01-21 a Negative
12-01-21 b Negative
12-02-21 b Negative
12-02-21 c na
12-03-21 d Positive

期望的输出:

Date
2021-03-21

最有效的方法是什么? 我知道人们通过快速搜索使用的一些元素,例如一些组合排名函数、内部查询或 WITH,但我不知道要安排的结构或格式。

例如,逻辑上我在想,按日期对 table 进行排序,当 count(Date) = 4 时拉出日期,但我不确定结构。我可以想出逻辑,对我来说最难的是结构。

感谢您的耐心和时间:)

您可以使用 SUM() OVER () window 函数以及条件,例如

WITH tt AS
(
 SELECT t.*, 
        SUM(CASE WHEN Result!='na' THEN 1 END) OVER (ORDER BY Date) AS rnk
   FROM t
)
SELECT Date
  FROM tt
 WHERE rnk = 4

ROW_NUMBER()

WITH tt AS
(
 SELECT *, ROW_NUMBER() OVER (ORDER BY Date) AS rnk
   FROM t
  WHERE Result!='na' 
)
SELECT Date
  FROM tt
 WHERE rnk = 4