BigQuery-SQL日期函数,按年份跨月分组

时间:2019-02-08 01:39:43

标签: sql google-cloud-platform google-bigquery

我在BigQuery表中有一个字段:

  

'created_date'

。我需要按跨年的月份按“ created_date”获取记录计数的输出:例如:2014 ... 2019:

所需的输出:

2014
Jan   1125
Feb   3308

2015
Jan   544
Feb   107
...

2016
...

2017

2018
...

2019
Jan   448
Feb   329
...

以此类推。

甚至:

Jan-2014  <count>
Feb-2014  <count>

任何事情都可以做,只是按月对所有记录进行包含性计数(汇总)。

我在Oracle,PostgreSQL和MySQL的Stack Overflow上发现了几种方法,但是这些方法都不适用于BigQuery。

有人成功使用BigQuery完成此操作吗? (如何)。所有回复,非常感谢。

2 个答案:

答案 0 :(得分:1)

以下是用于BigQuery标准SQL

假定#standardSQL SELECT FORMAT_DATE('%b-%Y', created_date) mon_year, COUNT(1) AS `count` FROM `project.dataset.table` GROUP BY mon_year ORDER BY PARSE_DATE('%b-%Y', mon_year) 字段是DATE数据类型

Row mon_year    count    
1   Jan-2014    1389     
2   Feb-2014    1255     
3   Mar-2014    1655     
. . .   
60  Dec-2018    1677     
61  Jan-2019    1534     
62  Feb-2019    588  

以上查询将产生类似

的内容
<?php

$pid = pcntl_fork();
if ($pid > 0)
{
    echo "pid: $pid\n";
    $status = 0;
    pcntl_waitpid($pid, $status);
    if (pcntl_wifsignaled($status))
        echo "child crashed\n";
    if (pcntl_wifexited($status))
        echo "child exited normally\n";
    if (pcntl_wifstopped($status))
        echo "child stopped\n";
}
else if ($pid == 0)
{
    $n = 0;
    while (++$n < 10)
    {
        echo ".";
        sleep(1);
        if ($n == 8)
        {
            // to cause a crash
            //   $n = $n / 0;
            $a = "a";
            unserialize(str_replace('1', 2147483647, serialize($a)));
        }
    }
}
?>

答案 1 :(得分:0)

使用date_trunc()

select date_trunc(created_date, month)as yyyymm, count(*)
from t
group by yyyymm
order by yyyymm;