Intereting Posts
Группировать по значениям, которые находятся в последовательности MySQL 1062 – Дублирующая запись '0' для ключа 'PRIMARY' Получение счета из 2 таблиц и групп по месяцам com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Дублируемая запись '' для ключа 'PRIMARY' MySQL Trigger – сохранение SELECT в переменной Длина столбцов с несколькими столбцами TypeError: объект 'int' не поддерживает индексирование эмуляция MySQL substring_index () в PGSQL Установите SQLAlchemy для использования PostgreSQL SERIAL для создания идентичности Как проверить, существуют ли данные в нескольких таблицах (все они имеют один и тот же столбец)? SQL Reader говорит, что нет значений, запрос кажется прекрасным MyBatis – ResultHandler не вызывается Обновление T-SQL с помощью SUM и Group BY Как получить эксклюзивную блокировку базы данных firebird для выполнения изменений схемы? Сгенерируйте и вставьте большой CLOB (1 МБ) с помощью SQL * Plus

Как выбрать строку с максимальной датой

это мое имя таблицы tblPE

PEID |idnum | PE_DATE_EXAM | ATTENDANCE 1 | 39 | 2014-08-01 | PRESENT 2 | 42 | 2014-08-10 | ABSENT 3 | 39 | 2014-08-12 | PRESENT 4 | 43 | 2014-08-05 | PRESENT 5 | 42 | 2014-07-15 | NULL 6 | 39 | 2014-07-03 | ABSENT 7 | 41 | 2014-08-01 | PRESENT 

Я хочу выбрать максимальное значение PE_DATE_EXAM, где idnum = 39 и ATTENDANCE = PRESENT

результат должен быть:

 PEID |idnum | PE_DATE_EXAM | ATTENDANCE ------------------------------------------- 3 | 39 | 2014-08-12 | PRESENT 

Для возврата одной записи вы можете использовать LIMIT :

 SELECT * FROM tblPE t WHERE t.idnum = 39 AND t.ATTENDANCE = 'PRESENT' ORDER BY t.PE_DATE_EXAM DESC LIMIT 1; 

Если вы хотите, чтобы он был динамическим для всех idnum , вы можете использовать NOT EXISTS() :

 SELECT * FROM tblPE t WHERE NOT EXISTS(SELECT 1 FROM tblPE s WHERE t.idnum = s.idnum AND s.ATTENDANCE = 'PRESENT') AND t.attendance = 'PRESENT' 

Вы можете использовать коррелированный подзапрос, чтобы найти максимальные даты для определенных id (s). Я лично считаю, что это более читаемо и гораздо более прямолинейно. Кроме того, этот подход, как правило, является агностическим языком (предполагается, что мы имеем дело с реляционными базами данных SQL) https://en.wikipedia.org/wiki/Correlated_subquery

 SELECT * FROM tblPE t1 WHERE t1.Date = ( SELECT MAX(Date) FROM tblPE t2 WHERE t1.Id = t2.Id ) AND t1.Id = 39; 

Для более общего решения:

 SELECT PEID, idnum, PE_DATE_EXAM, ATTENDANCE FROM tblPE WHERE idnum = 39 AND ATTENDANCE = 'PRESENT' AND PE_DATE_EXAM in ( SELECT MAX(PE_DATE_EXAM) FROM tblPE WHERE idnum = 39 AND ATTENDANCE = 'PRESENT') 
  SELECT top 1 * FROM tblPE t WHERE t.idnum = 39 AND t.ATTENDANCE = 'PRESENT' ORDER BY t.PE_DATE_EXAM DESC; 
 select PEID,IDNUM,PE_DATE_EXAM,ATTENDANCE from (select PEID,IDNUM,PE_DATE_EXAM,ATTENDANCE,dense_rank() over(order by PE_DATE_EXAM desc) rnum from TBLPE order by PE_DATE_EXAM desc) where rnum = '1'; 

Этот запрос написан на основе вашего результата запроса. Если вам нужны какие-либо разъяснения, дайте мне знать.