Возьмите первое уникальное значение большого набора в оракуле

У меня большой большой набор, но я просто хочу взять первое уникальное значение каждого набора определенного столбца (c.id).

У меня это пока есть, и это работает .. Но мне нужно получить 1 запись для разных c.ID, потому что теперь я получаю несколько c.ID, я просто хочу игнорировать и просто иметь УНИКАЛЬНОЕ или ПЕРВОЕ значение 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' 

Спасибо.

Добавьте образцы данных. Вам легко будет помочь

Indrakumara 30.08.2018 18:44

И ожидаемый результат

Guillaume CR 30.08.2018 18:53
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
52
2

Ответы 2

Что вы называете «первым»? Строки в таблице в реляционной базе данных похожи на шары в корзине; нет никакого «приказа», если вы его не примените.

Как вы это выразились, вам все равно, какой именно, поэтому - возьмите любой из них. Простой способ сделать это - использовать одну из функций агрегирования (например, MIN) и поместить все остальное в предложение GROUP BY, например

select
  s.room,
  s.expression,
  min(c.ID) max_id
from ...
where ...
group by s.room, 
         s.expression;
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;

Другие вопросы по теме