id
考虑已按时间戳分组并按降序排序的关注窗口。
ID | 时间戳 | 瓦尔 |
---|---|---|
富 | 10:50 | 无效的 |
富 | 10:40 | A |
富 | 10:30 | A |
富 | 10:20 | 无效的 |
富 | 10:10 | 无效的 |
富 | 10:00 | 乙 |
富 | 9:50 | C |
富 | 9:40 | 无效的 |
富 | 9:30 | d |
富 | 9:20 | 无效的 |
假设val
一旦出现不同的值,a就不会再次出现。也就是说,我不会出现,a,b,a
但a,null,a
可能会出现。我想针对val
未NULL
见过或以前见过的条件生成滚动计数。也就是说,我想要这样的东西:
ID | 时间戳 | 瓦尔 | 数数 |
---|---|---|---|
富 | 10:50 | 无效的 | 0 |
富 | 10:40 | A | 1 |
富 | 10:30 | A | 1 |
富 | 10:20 | 无效的 | 1 |
富 | 10:10 | A | 1 |
富 | 10:00 | 乙 | 2 |
富 | 9:50 | C | 3 |
富 | 9:40 | 无效的 | 3 |
富 | 9:30 | d | 4 |
富 | 9:20 | 无效的 | 4 |
所以本质上是一个“崩溃”的计数。我尝试过类似的东西
SELECT *, COUNT(val) OVER (PARTITION BY id ORDER BY timestamp DESC) count
Run Code Online (Sandbox Code Playgroud)
但这并没有忽视val
之前发生的事情。
知道如何做到这一点吗?
考虑以下方法
select * except(first_seen),
countif(first_seen and not val is null) over(order by timestamp desc) distinct_count
from (
select *,
1 = row_number() over(partition by val order by timestamp desc) first_seen
from table
)
Run Code Online (Sandbox Code Playgroud)
如果应用于您问题中的样本数据 - 输出是
归档时间: |
|
查看次数: |
427 次 |
最近记录: |