消除查询中的重复值

时间:2018-08-20 22:07:31

标签: sql google-bigquery

我有一个非常简单的查询,如下所示:

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,但没有成功。我应该使用其他功能吗?

2 个答案:

答案 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
)