每个产品的SQL访问者重复

时间:2018-10-02 13:01:38

标签: sql google-bigquery

我有一个主表和访问者,并按日期和小时将它们链接起来(“访问者”表中只有日期,小时和访问者)

这是我的桌子

DATE        HOUR  ORDER_ID   ITEM     VISITORS
2018-09-25  14    123456     Box      140
2018-09-25  14    345677     Paper    140
2018-09-25  14    234678     Bear     140

但是我需要以某种方式使其变得如此,以删除重复的访客,这有可能吗?

DATE        HOUR  ORDER_ID   ITEM     VISITORS
2018-09-25  14    123456     Box      140
2018-09-25  14    345677     Paper    
2018-09-25  14    234678     Bear     

我正在寻找了解如何做到的逻辑。 因为我需要在同一张桌子上放置访问者

2 个答案:

答案 0 :(得分:3)

您似乎想要:

select date, hour, order_id, item,
       (case when row_number() over (partition by date, hour order by order_id) = 1
             then visitors
        end) as visitors
from t;

在给定的日期和时间,这仅会在一行中包含visitors

答案 1 :(得分:1)

我觉得您真正需要的是下面的

DATE        HOUR  ORDERS.ORDER_ID    ORDERS.ITEM      VISITORS
2018-09-25  14    123456             Box              140
                  345677             Paper    
                  234678             Bear     

为此,您可以使用类似下面的内容(基于有限的信息对表进行一些假设)

#standardSQL
WITH `project.dataset.main_table` AS (
  SELECT '2018-09-25' DATE, 14 HOUR, 123456 ORDER_ID, 'Box' ITEM UNION ALL
  SELECT '2018-09-25', 14, 345677, 'Paper' UNION ALL
  SELECT '2018-09-25', 14, 234678, 'Bear' 
), `project.dataset.visitors_table` AS (
  SELECT '2018-09-25' DATE, 14 HOUR, 140 VISITORS 
)
SELECT DATE, HOUR, ARRAY_AGG(STRUCT(ORDER_ID, ITEM)) ORDERS, SUM(VISITORS) VISITORS 
FROM `project.dataset.main_table` m
JOIN `project.dataset.visitors_table` v
USING(DATE, HOUR)
GROUP BY DATE, HOUR