【问题标题】:BigQuery - Select only first row in BigQueryBigQuery - 仅选择 BigQuery 中的第一行
【发布时间】:2018-11-28 02:57:50
【问题描述】:

我有一个数据表,其中在 A 列中我有一组重复的数据(一个接一个)。

我只想根据 A 列中的值(没有其他条件)选择每个组的第一行。请注意,我还希望为提到的新找到的行选择所有相应的列(我不想排除它们)。

谁能帮我做一个正确的查询。

这是一个示例: SAMPLE

谢谢!

【问题讨论】:

  • 您能否分享一些示例数据以及您到目前为止所做的尝试?
  • 您好@BenP,我在 Excel 中的注释中添加了我的示例数据的图片(因此我不知道如何将其添加到 cmets :D 中)。你可以说在 REFERENCE 列中,例如,在第 2、3、4 行中,我有相同的数据,我只想显示第一行。我尝试了一些查询,但对我没有用。此外,重要的是所选行也具有所有对应的列。

标签: google-bigquery


【解决方案1】:

您现在可以使用qualify 获得更简洁的解决方案:

select
   *
from
   your_dataset.your_table
where true
qualify ROW_NUMBER() OVER(PARTITION BY columnA ORDER BY columnA) = 1

【讨论】:

  • QUALIFY 与窗口化的性能有何不同?
  • P.S. QUALIFY 仍处于预览阶段
【解决方案2】:

在查询末尾添加LIMIT 1

类似

SELECT name, year FROM person_table ORDER BY year LIMIT 1

【讨论】:

    【解决方案3】:

    在 BigQuery 中,行的物理顺序并不重要。 “BigQuery 不保证表中行的稳定排序。只有带有显式 ORDER BY 子句的查询结果才具有明确定义的顺序。”[1]

    首先,您需要定义哪个属性将确定您的组的第一行,然后您可以通过使用该属性更改 ORDER BY 来运行 Vasily Bronsky 的查询。这意味着您应该向表中添加另一列以存储行的顺序,或者从您拥有的列中选择一个。

    【讨论】:

      【解决方案4】:
      #standardSQL
      SELECT row.*
      FROM (
        SELECT ARRAY_AGG(t LIMIT 1)[OFFSET(0)] row
        FROM `project.dataset.table` t
        GROUP BY columnA
      ) 
      

      【讨论】:

      • 谢谢@Mikhail。与使用等效的 row_number() 解决方案相比,您对性能有任何了解吗?
      【解决方案5】:

      你可以这样尝试:

      #standardSQL
      SELECT
         * EXCEPT(rn)
      FROM (
         SELECT
         *,
         ROW_NUMBER() OVER(PARTITION BY columnA ORDER BY columnA) AS rn
      FROM
         your_dataset.your_table)
      WHERE rn = 1
      

      这将返回:

      Row   columnA       col2       ...   
      1     AC1001        Z_Creation   
      2     ACO112BISPIC  QN
      ...
      

      【讨论】:

      • 您好,感谢您的帮助。这确实像您介绍的那样有效。但是,我需要它来处理整个表格,而不仅仅是我给出的示例。此外,正如我在评论和帖子中所述,我还需要显示所有当前的专栏。
      • 所以选择了您的表格而不是我的示例并选择 * EXCEPT(rn)。帖子编辑
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多