获取一个字段的唯一记录,并与另一个字段的顺序结合
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 By
和Max()
聚合函数(获取最近的加入日期)。请尝试以下查询:
SELECT studentName,
MAX(joiningDate) AS joiningDate
FROM student
GROUP BY studentName
ORDER BY joiningDate ASC
【讨论】:
以上是关于获取一个字段的唯一记录,并与另一个字段的顺序结合的主要内容,如果未能解决你的问题,请参考以下文章
标准 sql 查询以获取与另一个表匹配的记录字段(Google BigQuery)
left joinright joininner joinfull join
(访问)在文本字段中搜索与另一个表字段中的字符串匹配的字符串,并在子表单中显示这些匹配记录