获取一个字段的唯一记录,并与另一个字段的顺序结合

Posted

技术标签:

【中文标题】获取一个字段的唯一记录,并与另一个字段的顺序结合【英文标题】: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  

【问题讨论】:

如果出现重复,你会选择哪个加入日期? 我想根据最近的加入日期获取唯一的学生姓名,以防加入日期重复。需要获取唯一的学生姓名。 【参考方案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 

【讨论】:

以上是关于获取一个字段的唯一记录,并与另一个字段的顺序结合的主要内容,如果未能解决你的问题,请参考以下文章

标准 sql 查询以获取与另一个表匹配的记录字段(Google BigQuery)

left joinright joininner joinfull join

根据添加记录的年份创建顺序 ID 值

(访问)在文本字段中搜索与另一个表字段中的字符串匹配的字符串,并在子表单中显示这些匹配记录

PHP技术 获取数据库中某个字段的最大值(int类型)并将获得的最大值与另一个值比较大小

Django - 如何获取与另一个字段相关的upload_to目录