sql - 在 oracle 中取一个大集合的第一个唯一值
问题描述
我有一个很大的集合,但我只想获取特定列(c.id)的每组的第一个唯一值。
到目前为止,我已经有了这个,它可以工作.. 但是我需要为每个不同的 c.ID 获取 1 条记录,因为现在我得到了几个 c.ID,我只想忽略并且只有一个 UNIQUE 或 FIRST 的 c.ID 值
Select
s.room,
s.EXPRESSION,
c.ID,
c.COURSE_NAME,
s.ROOM,
t.FIRST_NAME,
t.LAST_NAME,
std.GRADE_LEVEL,
CASE s.SCHOOLID
WHEN 300 THEN 'MiddleSchool'
WHEN 400 THEN 'UpperSchool'
WHEN 200 THEN 'LowerSchool'
WHEN 100 THEN 'ECC'
ELSE 'miau'
END AS "School"
from sections s
INNER JOIN COURSES c ON s.COURSE_NUMBER=c.COURSE_NUMBER
INNER JOIN TEACHERS t ON s.TEACHER=t.ID
INNER JOIN CC co ON s.ID=co.SECTIONID
INNER JOIN STUDENTS std ON std.ID = co.STUDENTID
WHERE s.TERMID IN (2800, 2801, 2803, 2804)
AND t.LAST_NAME='Dilworth'
谢谢。
解决方案
with data as (
Select s.room, s.EXPRESSION, c.ID, c.COURSE_NAME, /* s.ROOM why twice? */,
t.FIRST_NAME, t.LAST_NAME, std.GRADE_LEVEL,
CASE s.SCHOOLID
WHEN 300 THEN 'MiddleSchool'
WHEN 400 THEN 'UpperSchool'
WHEN 200 THEN 'LowerSchool'
WHEN 100 THEN 'ECC'
ELSE 'miau'
END AS "School",
row_number() over (partition by c.ID order by ??) as rn /* which is first? */
from sections s
INNER JOIN COURSES c ON s.COURSE_NUMBER = c.COURSE_NUMBER
INNER JOIN TEACHERS t ON s.TEACHER = t.ID
INNER JOIN CC co ON s.ID = co.SECTIONID
INNER JOIN STUDENTS std ON std.ID = co.STUDENTID
WHERE s.TERMID IN (2800, 2801, 2803, 2804) AND t.LAST_NAME = 'Dilworth'
)
select * from data where rn = 1;
推荐阅读
- xml - XSLT:显示一个节点的多个实例
- java - 适配器 API 中的类命名
- reactjs - 无法绑定到导入的函数。错误未定义
- php - 在 wordpress 网站上更改语言
- android - Xamarin:带有计时器的Android Widget,当应用程序被杀死时停止
- node.js - 通过 Swagger 和 Express 验证请求正文变量
- html - 删除序言中的单引号(Html - Prolog)
- javascript - 在 gulp 任务中执行多个异步操作?
- javascript - 嵌套过渡期间NodeJS错误渲染
- sapui5 - Fiori Launchpad 插件