Dataphin有个指标计算逻辑需要用到ROW_NUMBER函数取开窗的第一条这种指标怎么定义呢?
当前定义是基于一个来源主表的查询,基于查询结果的可以先用计算任务插入到物理表,在进行设置。类似这样。
-此回答整理自钉群“Dataphin公共云答疑群”
在Dataphin中,你可以使用OVER()
子句来定义窗口函数,例如ROW_NUMBER()
。下面是一个例子:
假设你有两个表orders
和order_items
,其中orders
包含订单ID和客户ID,order_items
包含订单ID和产品ID。你想找出每个客户购买的第一件产品。
你可以使用以下查询:
SELECT oi.product_id, ROW_NUMBER() OVER (PARTITION BY oi.customer_id ORDER BY oi.order_id ASC) AS row_number
FROM order_items oi
WHERE EXISLE(SELECT * FROM orders WHERE customer_id = oi.customer_id AND product_id IS NOT NULL);
在这个查询中,ROW_NUMBER()
函数被用来给每个客户分区内的所有订单按顺序编号。PARTITION BY
子句表示我们将按照客户ID进行分区,ORDER BY
子句表示我们将按照订单ID升序排列。ASC
参数告诉ROW_NUMBER()
函数使用升序排列。
如果oi.product_id
是null,说明还没有找到第一件产品,所以row_number
会被设为0。如果找到了第一件产品,row_number
就会从1开始计数。
这个查询的结果将会是:
+-------------+--------------+
| product_id | row_number |
+-------------+--------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | NaN |
| 5 | NaN |
| 6 | NaN |
+-------------+--------------+
这里需要注意的是,ROW_NUMBER()
函数返回的是float
类型,所以在某些情况下,比如上面的例子,当所有的product_id
都是null的时候,ROW_NUMBER()
函数的返回值就是NaN
(非数字)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。