【问题标题】:Fetch Unique record of one field and also combine with order by another field获取一个字段的唯一记录,并与另一个字段的顺序结合
【发布时间】:2018-10-26 14:50:02
【问题描述】:

我想从学生集合中获取唯一记录[studentName] 基于加入日期

示例:学生 [TableName]

studentName     joiningDate
Rosy             2018-06-25
Meera            2018-07-20                  
Rosy             2018-06-20

我在下面的查询中试过这个,但没有用。

通过加入日期从学生订单中选择不同的(学生姓名)

我想要这样的结果,

studentName     joiningDate
Rosy             2018-06-25
Meera            2018-07-20  

【问题讨论】:

  • 如果出现重复,你会选择哪个加入日期?
  • 我想根据最近的加入日期获取唯一的学生姓名,以防加入日期重复。需要获取唯一的学生姓名。

标签: mysql google-bigquery


【解决方案1】:

以下适用于 BigQuery 标准 SQL,适用于该表中任意数量的附加字段,无需更改查询

#standardSQL 
SELECT AS VALUE ARRAY_AGG(t ORDER BY joiningDate DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.student` t
GROUP BY studentName

您可以使用您问题中的虚拟数据进行测试和使用:

#standardSQL
WITH `project.dataset.student` AS (
  SELECT 'Rosy'studentName, '2018-06-25' joiningDate UNION ALL
  SELECT 'Meera', '2018-07-20' UNION ALL                  
  SELECT 'Rosy', '2018-06-20' 
) 
SELECT AS VALUE ARRAY_AGG(t ORDER BY joiningDate LIMIT 1)[OFFSET(0)]
FROM `project.dataset.student` t
GROUP BY studentName

结果

Row studentName joiningDate  
1   Rosy        2018-06-25   
2   Meera       2018-07-20   

【讨论】:

    【解决方案2】:

    应该改用GROUP BY,像这样:

    SELECT studentName, MIN(joiningDate)
    FROM student
    GROUP BY studentName
    

    【讨论】:

      【解决方案3】:

      您可以使用Group ByMax() 聚合函数(获取最近的加入日期)。请尝试以下查询:

      SELECT studentName, 
             MAX(joiningDate) AS joiningDate
      FROM student 
      GROUP BY studentName
      ORDER BY joiningDate ASC 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        • 1970-01-01
        • 2020-06-03
        • 1970-01-01
        • 2020-08-31
        • 2010-11-13
        相关资源
        最近更新 更多