Раздел с выбором отдельного - PullRequest
0 голосов
/ 19 июня 2020

У меня есть набор данных, который выглядит так

  StudentName   Course Studentmailid          Score
    Student1       A   student1@gmail.com.     80
    Student1       A   student1@gmail.com.     75
    Student2       A   student2@gmail.com.     70
    Student1       B   student2@gmail.com.     70

Теперь мне нужны записи 1,3,4. Как правило, первое появление студента в каждом курсе

У меня есть запрос как

select distinct StudentName,Course, Studentmailid,Score fromStudentTable group by Course

, и это вызывает ошибку. Что мне нужно настроить запрос, чтобы получить желаемый результат

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Вам нужен столбец для определения первого элемента из нескольких строк. В противном случае нет гарантии, что вы всегда будете получать один и тот же результат. Ниже приведен пример, в котором я заказываю по NULL, что возвращает запись в обычном порядке. Но это не всегда будет возвращать один и тот же результат.

Вам нужен столбец со значениями, чтобы упорядочить все записи. Затем вы можете просто заменить часть заказа в функции WINDOW на свой столбец.

Demo Here

SELECT * FROM
(
    SELECT *,
    ROW_NUMBER() OVER (PARTITION BY StudentName, Course ORDER BY (SELECT NULL)) RN
    -- ORDER BY (SELECT NULL) is basically to keep data as it is now in the table
    -- But there is no guaranty that it will order data in same order always
    FROM your_table
)A
WHERE RN=1
0 голосов
/ 19 июня 2020

Надеюсь, это поможет.

;with cte as (
  select StudentName,Course, Studentmailid,Score, Row_Number() over (partition by StudentName, Course order by StudentName) as Row_Num from StudentTable
)
select * from cte where Row_Num = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...