【发布时间】:2015-11-13 18:52:29
【问题描述】:
我有一个 BigQuery 表,其结构如下:
file_id | file_name | error_time_stamp
_ _ _ _ _ _| _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _
1 | abcd.txt | 2015-08-19 19:29:22
2 | efgh.txt | 2015-08-19 19:31:25
1 | abcd.txt | 2015-08-19 19:32:20
2 | efgh.txt | 2015-08-19 19:33:40
2 | efgh.txt | 2015-08-19 19:34:36
我想查询该表以查找 file_id 的唯一计数并降序排序。我使用查询:
SELECT file_id, file_name, count(file_id) as counter FROM [dataset.tablename] group by file_id, file_name ORDER BY counter DESC LIMIT 1000
此查询运行良好,并提供如下所需的结果。
file_id | file_name | counter
_ _ _ _ _ _| _ _ _ _ _ _ _ _ | _ _ _ _ _ _
2 | efgh.txt | 3
1 | abcd.txt | 2
现在我想根据 error_time_stamp 大于 19:30:00 找到计数器(这是时间戳。这里给出的日期时间格式仅供阅读。我使用纪元长时间戳来查询)。
SELECT pp, ss, count(pp) AS counter FROM (SELECT file_id as pp, file_name as ss FROM [dataset.tablename] where error_time_stamp >= 1440076613) AS main_data group by pp, ss ORDER BY counter DESC LIMIT 1000
现在 file_id 1 的预期计数是 1。但我仍然得到 2。我的查询有什么问题?
【问题讨论】:
-
count(case when err_t_stamp >= ... then 1 end) -
请注意,您写的 Epoch 时间不是 19:30...无论您是哪个格林尼治标准时间.. 您的查询似乎很好.. 尝试像印度人建议的那样使用 count case when..
-
您的 Epoch 时间戳计算为 19:17:57,而不是 19:30...使用正确的 Epoch。
-
@Balinti 时间戳只是一个示例,不完全是我正在运行的。我用 datetime.now() + timedelta(minutes=-30) 计算服务器中的时间戳以获得最后 30 分钟之前的时间,因为我只想要最后 30 分钟的报告
-
@Indian 我应该在哪个查询中添加这个? 1日还是2日?
标签: sql google-bigquery