【问题标题】:Match array elements of the same index in SQL / BigQuery在 SQL / BigQuery 中匹配相同索引的数组元素
【发布时间】:2022-01-03 09:48:45
【问题描述】:

我想在 SQL/BigQuery 中的先前匹配期间输出与索引匹配的数组内的元素

例如,我有这 5 个字段。 Match_Home_Date 和 Match_Away_date 是 Array(String) 格式。

Match_ID Match_Home Match_Away Match_Home_Date Match_Away_Date
121 101, 102 103, 121 [01-02-2021, 01-05-2021] [01-07-2021, 01-09-2021]
131 131, 140 117, 115 [02-02-2021, 02-15-2021] [02-20-2021, 02-25-2021]

我想输出一个“最终日期”字段,当 Match_ID 匹配到 Match_Home 或 Match_Away 时,它将输出相同索引的对应 Match_Home_Date 或 Match_Away_Date。

输出应该是:

Final Date
01-09-2021
02-02-2021

【问题讨论】:

    标签: sql arrays indexing google-bigquery matching


    【解决方案1】:

    考虑以下方法

    select Match_ID, 
      (Match_Home_Date || Match_Away_Date)[offset(
      ( select offset
        from unnest(split(Match_Home) || split(Match_Away)) id with offset 
        where trim(id)  = '' || Match_ID
      ))] as Final_Date
    from your_table            
    

    如果应用于您问题中的样本数据 - 输出是

    你可以使用下面的cte来测试上面

    with your_table as (
      select 121 Match_ID, '101, 102' Match_Home, '103, 121' Match_Away, ['01-02-2021', '01-05-2021'] Match_Home_Date, ['01-07-2021', '01-09-2021'] Match_Away_Date union all
      select 131, '131, 140', '117, 115', ['02-02-2021', '02-15-2021'], ['02-20-2021', '02-25-2021'] 
    )
    

    【讨论】:

    • 感谢您的回复,我用您的示例数据进行了尝试,它可以工作。但是我用我的数据进行了尝试,但没有成功,因为也许我所有的列都是 STRING(我的原始数据集是 STRING,我只是在这里简化了问题)。 Match_ID、Match_Home、Match_Away 是 STRING,Match_Home_Date 和 Match_Away_Date 是 ARRAY (STRING)
    • 如果您的所有列都是字符串 - 只需在第二行添加 SPLIT - 比如 split(Match_Home_Date) || split(Match_Away_Date) - 请立即尝试并告诉我!
    • 嗨 Mikhail,它仍然不起作用,因为第二行中的数据(Match_Home_Date 和 Match_Away_Date)是 ARRAY 数据。我认为 SPLIT 仅适用于 STRING 对吧?
    • 没错!拆分适用于字符串!您是否尝试过在我的回答中使用示例数据?该样本数据基于您在问题中描述数据的方式!很明显——如果你的真实数据不同——你应该做相应的调整!
    • 实际上,是的,我的示例似乎过于简单化了?这是我的实际数据。 MATCH_ID (字符串) | MATCH_HOME(字符串)| MATCH_AWAY(字符串)| MATCH_HOME_DATE (数组) | MATCH_AWAY_DATE (ARRAY) 19.56V.25 | 19.56V.25、19.52X.26 | 19.48W.27、19.35R.28 | [2021-10-30,2021-10-31] | [2021-11-05,2021-11-06] 最终日期应为:2021-10-30
    猜你喜欢
    • 2022-01-06
    • 2018-12-29
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多