SQL, используя top или другие команды для извлечения данных - PullRequest
0 голосов
/ 16 февраля 2019

То, что я пытаюсь сделать, это вытащить данные о том, где ученик посещал школу в течение самых последовательных лет

Вот пример данных, которые я хочу получить, скажем ...

studentID   years
__________|_______
A123        1992
B123        1991
B123        1990

В этом примере, если я использую top (1), он просто вытянет первый, то же самое, если я выберу годы, он просто потянет тот, потому что его int больше, чем в 1992 году, а не в 1991 и 1990 годах. Так что, если кто-тоходил в школу еще несколько лет подряд, но это было за годы до 1992 года, как бы я вытащил правильного ученика B123?

Ответы [ 3 ]

0 голосов
/ 16 февраля 2019
Select student
from (
    Select student
           ,year
           ,year - row_number() over (partition by student  order by year) as rnk 
    from tableName
    )
group by rnk
having count(*)>1
order by count(*) desc;

Предполагается, что вам нужны студенты, которые посещали более одного года подряд ... вышеуказанный запрос будет работать.

Если ваша версия mysql ниже, чем 8.0, то вам нужно переписать логику округленного числааналитическая функция не поддерживается для младшей версии.

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

0 голосов
/ 16 февраля 2019

В течение последовательных лет вы можете сделать:

Select student, min(year), max(year)
from (Select t.*,
             row_number() over (partition by student order by year) as seqnum 
      from t
     ) t
group by student, (year - seqnum)
order by count(*) desc
limit 1;

Примечание: для этого требуется MySQL 8 +.

Для ваших результатов, тем не менее, вы можете просто хотеть студентов с большинство лет.Если так:

select student, count(*) as numyears
from t
group by student
order by numyears desc
limit 1;
0 голосов
/ 16 февраля 2019

Вот что я понял по этому вопросу: вы хотите получить наименьшее значение Years.

Student            Years
A                  1992
B                  1994
C                  1991
D                  1990

Так что я предполагаю, что вы хотите, чтобы D Студент с 1990 года

Для этого вы можете

Select 
      top 1 Years 
From 
      TableName 
Order By Years Asc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...