SQL(Presto):当 x 的总和等于某个阈值时返回日期

Posted

技术标签:

【中文标题】SQL(Presto):当 x 的总和等于某个阈值时返回日期【英文标题】:SQL (Presto): Return Date when Sum of x equals some threshold 【发布时间】:2022-01-17 04:49:25 【问题描述】:

我有一张桌子,如下所示。我想在 Result 不等于 'na' 的总和等于 4 时返回 Date

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,但我不知道要安排的结构或格式。

例如,从逻辑上讲,我在想,当 count(Date) = 4 时拉日期时,按日期对表格进行排名,但我不确定结构。我能想出逻辑,结构对我来说是最难的部分。

感谢您的耐心和时间:)

【问题讨论】:

【参考方案1】:

您可以使用SUM() OVER () 窗口函数和条件,例如

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

【讨论】:

以上是关于SQL(Presto):当 x 的总和等于某个阈值时返回日期的主要内容,如果未能解决你的问题,请参考以下文章

查找列表中哪个数字总和等于某个数字的算法

在某个单词 Presto SQL 之后提取一个字符串

pandas筛选dataframe数据:指定一个数据列的值不等于某个固定值,而且另外一个数据列的值大于某一阈值

SQL:获取行列值的总和

根据 SQL 或 Presto Athena 中的某一行中的某个值过滤列

如何获取单个整数/浮点列的总和达到某个值的行