我在BigQuery
中有一个表,该表的列为 Published_date ,其数据类型为“时间戳”。我想计算该表中每天(特定月份)添加的平均行数。我有以下查询
SELECT AVG(Num_Rows)
FROM (SELECT [Day]=DAY( Published_Date ), Num_Rows=COUNT(*)
FROM `mytable`
WHERE Published_Date BETWEEN '20190729' AND '20190729 '
GROUP BY DAY( Published_Date ) ) AS Z
但是它会产生以下错误
无法将文字“ 20190729”转换为TIMESTAMP类型
由于我只需要timestamp
列中的日期,该如何处理时间戳?
答案 0 :(得分:0)
使用显式转换:
WHERE Published_Date BETWEEN TIMESTAMP('2019-07-29') AND TIMESTAMP('2019-07-29')
请注意,您有一列名为“ _date”,但错误是说该值是时间戳。我觉得这很混乱。我们在_ts
的列中使用timestamps
(对于_dt
来说是datetime
,对于_date
来说是date
)中使用约定。
为什么这很重要?时间戳记为UTC。因此,您可能需要注意时区和时间成分-在名为Publish_Date
的列中并不明显。
答案 1 :(得分:0)
我要计算该表中每天(特定月份)每天增加的行数
以下BigQuery标准SQL示例
#standardSQL
SELECT AVG(Num_Rows) AS avg_rows_per_day
FROM (
SELECT DATE(Published_Date) AS day, COUNT(*) AS Num_Rows
FROM `project.dataset.mytable`
WHERE DATE(Published_Date) BETWEEN '2019-07-01' AND '2019-07-31'
GROUP BY day
)