Проверка SQL-запроса - просто - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь написать запрос, чтобы найти 2-ую самую старшую ученицу в классе. DOB - это дата рождения, поскольку имя и пол отметки времени varchar

SELECT min(DOB)
FROM Student
WHERE DOB > (SELECT min(DOB) FROM Student where gender='girl')

Это правильно?

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Следующий запрос предоставит вам желаемый результат

WITH T AS
(
SELECT *
   DENSE_RANK() OVER (ORDER BY DOB ) AS Rnk
FROM Student
WHERE gender='girl'
)
SELECT min(DOB)
FROM T
WHERE Rnk = 2;

Вы можете изменить значение RNK, чтобы получить следующее самое старое значение, скажем, для третьего самого старого вы можете использовать WHERE Rnk = 3

0 голосов
/ 07 декабря 2018
    WITH myTableWithRows AS (
    SELECT (ROW_NUMBER() OVER (ORDER BY   Student.DOB)) as row,*
    FROM Student )
    SELECT * FROM myTableWithRows WHERE  row = 2

Я создал этот поддельный пример, и результат запроса следующий:

Table and query result

Или же вы можете использовать этот запрос:

 Select top 1 * from (select top 2 from    Student order by dob desc) order by dob desc     
0 голосов
/ 07 декабря 2018

Или проще:

SELECT DOB
FROM Student
WHERE gender='girl'
GROUP BY DOB
ORDER BY DOB ASC
LIMIT 1,1

Группировка по DOB означает, что выбраны две идентичные DOB (близнецы?), Следующие за наименьшим.Его можно опустить во второй идентичной дате, которая считается второй самой старой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...