条件窗口函数sql

2hh7jdfx  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(306)

我希望查询一组数据的日期,但只有在过去7天的条件是真的。
比如说,

SELECT 
category_name,
entity_id
FROM table_name
WHERE 
condition_1 = True 
AND date_id <= current_date AND date_id >= current_date - 7

但是我想同时查询多个日期ID的窗口。
假设我有

2016-01-01, foo, 123, True
2015-12-31, foo, 123, False
2015-12-26, foo, 123, True
2015-12-31, bar, 12345, False

有一个标准的日期表,我会加入,比如

2015-01-01,
2015-01-02,
...

因为我的第一张table不一定每天都有记录
我希望结果是

2016-01-01, foo, 123, True
2016-12-31, foo ,123, True
2016-12-30, foo ,123, True
2016-12-29, foo ,123, True
2016-12-28, foo ,123, True
2016-12-27, foo ,123, True
2016-12-26, foo ,123, True

因为这些是过去7天内条件1为真的日期。最好的办法是什么?我试过类似的方法

SUM(condition_1) OVER (ORDER BY date_id
            ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)

以及加入一个日期表(以确保始终填充一个dateid)。但是,我不确定这是否是最好的实现,我没有得到正确的结果(仍在调试)。

wribegjk

wribegjk1#

我怀疑你想要一个 left join 对于您的查询:

SELECT t.category_name, t.entity_id,
       SUM(condition_1) OVER (ORDER BY c.date_id
                              ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
                             )
FROM calender c LEFT JOIN
     table_name t
     ON c.date_id = t.date_id AND t. condition_1 = True ;

我不认为 SUM(condition_1) 返回true或false—也许 MAX() 或者是一个聚合布尔值 OR . 然而,这就是你提出的问题。

相关问题