我有一个主表和访问者,并按日期和小时将它们链接起来(“访问者”表中只有日期,小时和访问者)
这是我的桌子
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
我正在寻找了解如何做到的逻辑。 因为我需要在同一张桌子上放置访问者
答案 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