Получение самой старой записи

Как я могу написать 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
;
Другие вопросы по тегам