条件窗口函数sql

时间:2016-04-24 01:03:26

标签: sql hive

我希望按日期查询一组数据,但仅限于过去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,
...

因为我的第一张桌子不一定每天都有记录

我希望结果是

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)

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

1 个答案:

答案 0 :(得分:2)

我怀疑你想要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。但是,这就是你提出的问题。