每个产品的SQL重复访客数

每个产品的SQL重复访客数,sql,google-bigquery,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    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     
我在寻找逻辑来理解如何做到这一点因为我需要访客在同一张表中

您似乎想要:

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;

这将在给定的日期和时间内只包括一行的
访客。

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

DATE        HOUR  ORDERS.ORDER_ID    ORDERS.ITEM      VISITORS
2018-09-25  14    123456             Box              140
                  345677             Paper    
                  234678             Bear     
要做到这一点,您可以使用以下内容(根据有限的信息对您的表进行一些假设)


MySQL或Google bigquery。。您不应该标记两个不同的RDBMS系统。@RaymondNijland我需要大查询,但如果它将在任何其他SQL语法中完成,我将调整它,我只是无法理解如何执行它的逻辑。“我需要大查询,但它将在任何其他SQL语法中完成,我将调整它”不符合逻辑最有可能的是Google bigquery在MySQL的标准ANSI SQL标准之上有其他扩展SQL实现。。在MySQL中,Google bigquery没有用户变量,这是可能的。@RaymondNijland很抱歉,我在bigquery(标准SQL)中需要它,而不是旧版的
#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