Intereting Posts

Как получить минимальную дату по каждой записи из нескольких записей

Я хотел бы получить минимальную дату каждой записи в моей таблице, имеющую несколько записей даты с одним первичным ключом. Взгляните на мой стол:

CaseNo Entry_date ABC-001 2/12/13 ABC-002 2/09/13 ABC-001 1/01/13 ABC-001 1/31/13 ABC-002 1/01/13 ABC-003 2/01/12 ABC-003 2/18/13 

Я хочу получить этот результат:

  CaseNo Entry_date Min_date ABC-001 2/12/13 1/01/13 ABC-002 2/09/13 1/09/13 ABC-001 1/01/13 1/01/13 ABC-001 1/31/13 1/01/13 ABC-002 1/09/13 1/09/13 ABC-003 2/01/12 2/01/13 ABC-003 2/18/13 2/01/13 

Я хочу получить минимальную дату каждого CaseNo, записанную на моем столе.

Я пробовал этот код:

 Select CaseNo,Entry_date, Min(Entry_date) as Min_date from mytable group by CaseNo 

Результат:

  CaseNo Entry_date Min_date ABC-001 1/01/13 1/01/13 ABC-002 1/09/13 1/09/13 ABC-003 2/01/12 2/01/13 

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

попробуй это

 SELECT CaseNo, Entry_date, (SELECT MIN(Entry_date) FROM Cases subc WHERE subc.CaseNo=c.CaseNo GROUP BY CaseNo) AS MinEntryDate FROM Cases c 

Не знаете, какие СУБД вы используете, но приходят на ум два подхода.

ВСТУПИТЬ в производную таблицу

Создайте производную таблицу ( CaseNo , MIN(Entry_date) ) и присоедините ее к своей основной таблице:

  SELECT CaseNo, Entry_date, d.Min_date AS "Min_date" FROM tbl INNER JOIN ( SELECT CaseNo, MIN(Entry_date) AS "Min_date" FROM tbl GROUP BY 1) d ON tbl.CaseNo = d.CaseNo; 

Использовать аналитические (оконные) функции

Если ваша RDBMS поддерживает его, вы можете пропустить производную таблицу и запросить свои записи с минимальным значением Entry_date CaseNo предоставляемым системой:

 SELECT CaseNo, Entry_date, MIN(Entry_date) OVER (PARTITION BY CaseNo) AS "Min_date" FROM tbl;