Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 合并为一行多栏日期_Sql_Google Bigquery - Fatal编程技术网

Sql 合并为一行多栏日期

Sql 合并为一行多栏日期,sql,google-bigquery,Sql,Google Bigquery,我需要从Github中取样大量java项目。我正在使用Google Big Query查询GitHub归档文件。我目前能够列出一个很长的列表,其中包含顶级java repo的每个发布事件 但是,我希望合并结果,将具有匹配回购名称的结果放在一行中,然后为每个事件创建单独的日期列,最好按月创建一个指向发布URL的链接,我将从JSON负载中提取该URL(一个月内可能有多个发布事件)。我在下面给出了一个模型 除了基础知识之外,我对SQL几乎没有什么经验,我想知道我想做的是简单的还是复杂的。我可以用jav

我需要从Github中取样大量java项目。我正在使用Google Big Query查询GitHub归档文件。我目前能够列出一个很长的列表,其中包含顶级java repo的每个发布事件

但是,我希望合并结果,将具有匹配回购名称的结果放在一行中,然后为每个事件创建单独的日期列,最好按月创建一个指向发布URL的链接,我将从JSON负载中提取该URL(一个月内可能有多个发布事件)。我在下面给出了一个模型

除了基础知识之外,我对SQL几乎没有什么经验,我想知道我想做的是简单的还是复杂的。我可以用java来完成这一切,但是我希望通过在查询阶段使用SQL来节省时间

电流输出

repo.name        created at        link 

repoA   2018-12-06 02:04:27 UTC     url
repoA   2018-02-07 02:33:57 UTC     url
repoA   2018-02-18 00:55:15 UTC     url
repoB   2018-03-21 19:14:02 UTC     url
repoB   2018-04-11 02:07:04 UTC     url
repoC   2018-07-02 14:58:12 UTC     url
我想要什么

        Jan     Feb     Mar     April   May
REPO A  URL     URL         
REPO B          URL     
REPO C          URL             URL , URL   

我当前的查询:

        Jan     Feb     Mar     April   May
REPO A  URL     URL         
REPO B          URL     
REPO C          URL             URL , URL   

*选择从githubarchive.year.2018中创建的repo.name,其中type=“releasevent”和repo.name按repo.name*排序(非常长的回购列表)

我将添加一个JSON_提取来获取有效负载,并从有效负载中获取URL

从中选择repo.name、created_at、JSON_EXTRACT(有效负载,$.zipball_url

模式:

type        STRING  NULLABLE    https://developer.github.com/v3/activity/events/types/
payload     STRING  NULLABLE    Event payload in JSON format
repo. name  STRING  NULLABLE    Repository name
created_at  TIMESTAMP   NULLABLE    Timestamp of associated event

我认为您只需要条件聚合:

SELECT repo.name, created_at,
       MAX(CASE WHEN EXTRACT(month FROM created_at) = 1 THEN link END) as jan,
       MAX(CASE WHEN EXTRACT(month FROM created_at) = 2 THEN link END) as feb,
       MAX(CASE WHEN EXTRACT(month FROM created_at) = 3 THEN link END) as mar
FROM githubarchive.year.2018
WHERE type = 'ReleaseEvent' AND
     repo.name IN ( very long list of repos ) 
GROUP BY BY repo.name