假设我有下面的表:
| User_id | COL1 | COL2 |
+---------+----------+------+
| 1 | | 1 |
| 1 | | 2 |
| 1 | 2421 | |
| 1 | | 1 |
| 1 | 3542 | |
| 2 | | 1 |
我需要另一个列来指示每行的下一个非空COL1值,因此结果将如下所示:
第一个
可以工作,但我使用的PostgreSQL不支持忽略空值子句。
是否有建议的解决方法?
5条答案
按热度按时间sy5wg1nm1#
如果您按如下顺序添加case when条件,您仍然可以使用窗口函数执行此操作:
这将首先使用非空值。
但是,与
skip nulls
相比,性能可能不会很好,因为数据库将不得不根据其他条件进行排序。6uxekuva2#
我也遇到了同样的问题。其他的解决方案可能会起作用,但我必须为我需要的每一行构建多个窗口。
你可以试试这个片段:https://wiki.postgresql.org/wiki/First/last_(aggregate)
如果创建了聚合,则可以使用它们:
ztmd8pv53#
使用相关子查询总是一种行之有效的方法:
n53p2ov04#
希望这能有所帮助,
它按colA排序,如果colA具有NULL值,则按colB排序。
5uzkadbs5#
您可以使用
COALESCE()
函数。对于您的查询:但我不明白为什么要按COL2排序,因为这几行的COL2值为空: