之后做一些研究,我发现,在TABLE_DATE_RANGE功能可以但是适合我的需要,表名必须是在<prefix><date>
的格式,我认为你的发现是不正确
尝试以下查询假设前一周表(假设表名是YYYMMDD格式的 - 所以没有前缀):
的BigQuery的大号egacy SQL
#legacySQL
SELECT <list of fields ...>
FROM (TABLE_DATE_RANGE([yourProject:yourDataset.],
DATE_ADD(CURRENT_TIMESTAMP(), -7 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(), -1 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY')
))
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3
你可以测试它[githubarchive:日]公共数据集
#legacySQL
SELECT
STRFTIME_UTC_USEC(created_at, "%Y%m%d") AS d,
DAYOFWEEK(created_at) AS dow,
DAYOFWEEK(CURRENT_TIMESTAMP()) AS cdow,
COUNT(1) AS rows
FROM (TABLE_DATE_RANGE([githubarchive:day.],
DATE_ADD(CURRENT_TIMESTAMP(), -7 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(), -1 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY')
))
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3
对于BigQuery的标准SQL
#standardSQL
SELECT
DATE(created_at) AS d,
EXTRACT(DAYOFWEEK FROM DATE(created_at)) AS dow,
EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) AS cdow,
COUNT(1) AS c
FROM `yourProject.yourDataset.*`
WHERE _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -7 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
AND FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -1 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3
请注意,在标准SQL的问题可以上升为这种模式,如果你有你的数据集中的意见 - 你会得到像Error: Views cannot be queried through prefix
错误在这种情况下 - 你可以使用下面的“伎俩“例如(假设视图不匹配(2 *)通配符
#standardSQL
SELECT
DATE(created_at) AS d,
EXTRACT(DAYOFWEEK FROM DATE(created_at)) AS dow,
EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) AS cdow,
COUNT(1) AS c
FROM `githubarchive.day.2*`
WHERE CONCAT('2', _TABLE_SUFFIX)
BETWEEN FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -7 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
AND FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -1 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
GROUP BY 1, 2, 3
ORDER BY 1, 2, 3
您没有使用MySQL。我最好的猜测是BigQuery,所以我恰当地标记了。 –
数据库是mysql,但是谢谢。 – szd116
哎呀,对不起 - 我以为你说你正在使用mysql:o)你是否期待BigQuery的答案? –