Получение самой старой записи
Как я могу написать SQL-запрос, чтобы получить самый старый мужской возраст в числовом формате, а не в формате dob?
name dob date job sex language prof salary
-------------------------------------------------------------------------
mitesh 1981-01-01 2001-01-01 m java architect 3100.00
ankur 1982-02-02 2001-02-02 m ruby scientist 3200.00
dhruv 1983-03-03 2001-03-03 m csharp designer 3300.00
ruchi 1981-01-01 2002-01-01 f php teacher 4000.00
3 ответа
Вы могли бы сделать что-то вроде:
Select top (1) Name, dob, datediff(YY,[dob],getdate()) as Age
from dbo.YourTableName
where sex = 'm'
order by Age Desc
Который будет работать в SSMS
Этот запрос MySQL выбирает самого старого мужчины и преобразует формат 'dbo' в возраст
SELECT MAX(TIMESTAMPDIFF(dob, '1970-02-01', CURDATE())) AS age
FROM dbo.data
WHERE sex='m'
age
функция
Некоторые базы данных, такие как Postgres, предлагают age
функция для расчета промежутка времени между парой временных меток. Передача одной отметки времени означает, что текущая дата-время будет использоваться в качестве второй пары.
Часовой пояс
Вы можете заботиться о часовом поясе, если вы хотите точный возраст.
Например, в Париже новые дни начинаются раньше, чем в Монреале. Поэтому, если код SQL выполняется около полуночи, вы получите другой результат, если код будет запущен на сервере с другим текущим часовым поясом по умолчанию.
Если вы заботитесь об этом уровне точности, укажите вторую дату в паре. Используйте функцию, которая использует часовой пояс, чтобы определить сегодняшнюю дату.
Строка как тип даты и времени
В идеале вы должны хранить значения даты и времени как типы даты и времени. Но я предполагаю, что в этом Вопросе ваша дата на самом деле является текстовой.
Алфавитный порядок = хронологический порядок
Если этот столбец даты рождения является текстовым значением в формате SQL, параллельном формату ISO 8601, то его алфавитный порядок также является хронологическим. Таким образом, мы можем напрямую использовать такой порядок, чтобы найти самое старое значение.
LIMIT
Получить первый ряд
LIMIT
Команда обрезает результирующий набор до первого x количества строк. Сортировка по дате рождения в порядке возрастания означает, что мы получим только первый ряд.
Пример кода
Совет: Присваивание именам столбцов и других объектов в SQL с последующим подчеркиванием позволяет избежать абсолютно любых столкновений с ключевыми словами / зарезервированными словами. Так обещает спецификация SQL.
SELECT name_ , date_of_birth_ , age( timestamp date_of_birth_ ) AS age_
WHERE sex_ = 'm'
ORDER BY date_of_birth_ ASC
LIMIT 1
;