Sql 如何不在单个BigQuery表中复制记录,并从单个表中获取每月总计
我有一个巨大的表(在BigQuery中是这样的),它本质上是一个事件日志。我正在尝试获取“新”记录的计数(上个月事件没有发生) 这些行看起来像:Sql 如何不在单个BigQuery表中复制记录,并从单个表中获取每月总计,sql,google-bigquery,Sql,Google Bigquery,我有一个巨大的表(在BigQuery中是这样的),它本质上是一个事件日志。我正在尝试获取“新”记录的计数(上个月事件没有发生) 这些行看起来像: timestamp event_name number grouping_name Sep. 08, 2019, 04:35 a.m. imaginary name 12345 imaginary group Sep. 08, 2019, 04:35 a.m. imagin
timestamp event_name number grouping_name
Sep. 08, 2019, 04:35 a.m. imaginary name 12345 imaginary group
Sep. 08, 2019, 04:35 a.m. imaginary name 98765 imaginary group
Oct. 14, 2019, 08:35 p.m. imaginary name 12345 imaginary group
Nov. 16, 2019, 12:30 p.m. imaginary name 12345 imaginary group
Nov. 16, 2019, 12:31 p.m. imaginary name2 54321 imaginary group
我试图从中获得以下信息:
month count
sep 2
oct 0
nov 1
因此,12345在9月份被计算在内,但不再计算
我尝试了多种方法,从使用到使用窗口函数,我似乎无法将一些有效的东西连接在一起
我最近一次失败的尝试是:
WITH eventlogs AS (
SELECT *
FROM mytable
WHERE grouping = 'mygroup'
SELECT
COUNT(DISTINCT number)
FROM (
SELECT
number, timestamp,
FIRST_VALUE(EXTRACT(MONTH FROM DATE '2019-04-01')) OVER (PARTITION BY anothergroup ORDER BY timestamp ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM eventlog
WHERE EXTRACT(MONTH FROM timestamp) = EXTRACT(MONTH FROM DATE '2019-04-30'))
查询没有返回错误,但结果肯定不正确。对于较小的数据集,这似乎很好:-(
任何帮助都将不胜感激:-)对于每天的新项目计数,您可以这样做:
WITH data AS (
SELECT *
FROM `bigquery-public-data.wikipedia.pageviews_2019`
WHERE DATE(datehour) BETWEEN "2019-09-01" AND "2019-09-10"
AND wiki='es'
AND title LIKE 'Abe%'
AND views>10
)
SELECT first_day, COUNT(*) c, STRING_AGG(title LIMIT 10) new_items
FROM (
SELECT title, TIMESTAMP_TRUNC(MIN(datehour), DAY) first_day
FROM data
GROUP BY title
)
GROUP BY first_day
ORDER BY first_day
将
TIMESTAMP\u TRUNC()
从DAY
更改为MONTH
,查看每月结果。谢谢Felipe!那太好了!知道如何将完整的distinct total列添加到此查询中吗?最好将这两个结果合并在一个结果中,以便于观察:-D@Ruz . . . 你接受了这个答案。然而,我不知道这是如何获得“新记录的(上个月没有发生该事件)。@GordonLinoff你有其他建议吗?从表面上看,结果似乎不错,但我会做更多的测试。@GordonLinoff嗯,我现在的数据下降了99.8%,这几乎肯定是错误的。Wargh:-(99%下降?这是什么意思?请注意,上面的查询有一个限制10
来显示新元素