НАЙТИ МИНИМАЛЬНОЕ ЗНАЧЕНИЕ - PullRequest
0 голосов
/ 06 октября 2019

Я написал код для определения минимального возраста учащихся, но он не работает.

SELECT 
  S.stuName,
  (YEAR(GETDATE()) - YEAR(S.stuBirthdate)) AS AGE
FROM tblStudent S
WHERE (YEAR(GETDATE()) - YEAR(S.stuBirthdate)) <= ALL   
        (SELECT(YEAR(GETDATE()) - YEAR(S.stuBirthdate))
            FROM tblStudent )

Не могли бы вы помочь с решением этой проблемы, пожалуйста?

Ответы [ 4 ]

0 голосов
/ 06 октября 2019

Самый простой способ получить список студентов с минимальным возрастом - это использовать SELECT TOP WITH TIES и ORDER BY:

SELECT TOP (1) WITH TIES S.stuName,
       (YEAR(GETDATE()) - YEAR(S.stuBirthdate)) AS AGE
FROM tblStudent S
ORDER BY AGE ASC;
0 голосов
/ 06 октября 2019

попробуйте этот запрос

SELECT S.stuName, MIN(YEAR(GETDATE())-YEAR(S.stuBirthdate)) AS AGE FROM tblStudent S GROUP BY S.stuName
0 голосов
/ 06 октября 2019

Неправильное использование псевдонима. Укажите отдельный псевдоним для таблицы в подзапросе. Сейчас вы сравниваете каждого ученика с собой.

SELECT 
  S.stuName,
  (YEAR(GETDATE()) - YEAR(S.stuBirthdate)) AS AGE
FROM tblStudent S
WHERE (YEAR(GETDATE()) - YEAR(S.stuBirthdate)) <= ALL   
        (SELECT(YEAR(GETDATE()) - YEAR(t2.stuBirthdate))
            FROM tblStudent t2 );
0 голосов
/ 06 октября 2019

Попробуйте это:

  SELECT 
    S.stuName,
    (YEAR(GETDATE()) - YEAR(S.stuBirthdate)) AS AGE
  FROM tblStudent S
  WHERE stuBirthDate = (
    SELECT MAX(stuBirthdate) FROM tblStudent
  ) -- Get birthdate of youngest student

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