sql - BigQuery FIRST_VALUE() - 先返回空值,同时仍指示排序?
问题描述
以如下数据结构为例:
ID | 日期 |
---|---|
1 | 2016-10-18 |
1 | 2019-08-01 |
1 | 2019-09-01 |
1 | 无效的 |
1 | 无效的 |
我希望能够对数据进行分区,添加一个具有最高日期但首先包含空值的新列。IE
ID | 日期 | 第一个值 |
---|---|---|
1 | 2016-10-18 | 无效的 |
1 | 2019-08-01 | 无效的 |
1 | 2019-09-01 | 无效的 |
1 | 无效的 | 无效的 |
1 | 无效的 | 无效的 |
在 Postgresql 中,这很简单:
SELECT *, first_value(date) OVER (PARTITION BY id order by date desc nulls first)
但是,在 BigQuery 中尝试此操作会引发以下错误:
NULLS FIRST not supported with descending sort order in RANGE clauses of analytic functions.
我可以实施什么来在 BQ 中实现相同的结果?
解决方案
不要使用first_value()
(尽管你可以让它工作)。只需使用max()
:
SELECT *, max(date) OVER (PARTITION BY id order by date)
在您的逻辑中,如果您不想要NULL
s,那么:
- 使用
NULLS LAST
这样的NULL
值不是第一个。 - 使用
IGNORE NULLS
因此优先考虑非 NULL 值。
编辑:
哦,你想做完全相反的事情:
first_value(date) over (partition by id
order by (date is null) desc, date desc
)
推荐阅读
- python - 遍历循环时遇到问题
- machine-learning - h2o如何返回mcc值
- php - 已验证状态 PayPal 信用卡付款
- html - 我正在尝试制作一个下载文件的标签,但它下载的是文件的链接,而不是实际的文件
- r - ggplot2 中的 X 轴从线性转换为对数刻度
- javascript - 即使在构造函数中绑定 this 后,也未定义 React this
- sql - 查找提供红色部分和绿色部分的供应商的 sid
- svg - 给定已知的背景颜色 (#000) 和已知的前景色 (#fff),我如何计算不透明度以匹配参考图像?
- java - 在小于 O(N) 的时间内找到序列的第 n 项
- python - 如何解决 Python Git 子模块的依赖关系