我有一个非常简单的查询,如下所示:
SELECT
event_time,
service_id,
order_id,
total_value,
purchase_type
FROM
order.table
同样,这是一个非常简单的查询。问题是,它会产生如下结果:
event_time service_id order_id total_value purchase_type
8/19/18 16:18 305030 42549440 39.98 PVC
8/19/18 16:09 305030 42549440 39.98 PCC
问题出在重复的order_id
数字上。如果我想编写一个仅使用发卡人order_id
并摆脱较新版本的查询该怎么办?作为记录,我尝试执行此MIN(event_time) OVER (PARTITION BY order_id) conversion_time
,但没有成功。我应该使用其他功能吗?
答案 0 :(得分:4)
一种方法使用窗口函数,例如:
select o.*
from (select o.*, row_number() over (partition by order_id order by event_time) as seqnum
from order.table o
) o
where seqnum = 1;
尽管这是“典型”方法,但另一种方法使用的资源更少:
select o.*
from (select o.*, min(event_time) over (partition by order_id) as min_event_time
from order.table o
) o
where min_event_time = event_time;
答案 1 :(得分:2)
以下是用于BigQuery标准SQL
#standardSQL
SELECT row.*
FROM (
SELECT ARRAY_AGG(t ORDER BY event_time LIMIT 1)[OFFSET(0)] row
FROM `order.table` t
GROUP BY order_id
)