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

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

   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

Я хочу получить минимальную дату каждого регистрационного номера в моей таблице.

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

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.

 Jakob Christensen25 апр. 2013 г., 10:57
 Nathan Stretch20 февр. 2013 г., 04:39
Кроме того, при задании вопросов sql, это помогает предоставить код для генерации вашего примера, а именно: CREATE TABLE и оператор INSERT. Таким образом, ответчики получают таблицу для проверки своих ответов без необходимости вручную копировать ваш пример. Это было довольно просто, так что не очень нужно, но хорошо иметь в виду.
 halfer25 апр. 2013 г., 10:58
@Jakob: не делаетимеет ли смысл закрывать второй дубликат, а не первый?
 Jakob Christensen25 апр. 2013 г., 11:03
@halfer: Да, но кажется, что OP активен только на новом посту.

Ответы на вопрос(2)

Решение Вопроса

попробуй это

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

ПРИСОЕДИНИТЬСЯ к производной таблице

Создать производную таблицу (,CaseNoMIN(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;
Используйте аналитические (оконные) функции

Если ваша СУБД поддерживает это, вы можете пропустить производную таблицу и запросить ваши записи с минимальнымEntry_date отCaseNo предоставляемые системой:

SELECT CaseNo, Entry_date, MIN(Entry_date) OVER (PARTITION BY CaseNo) AS "Min_date"
  FROM tbl;
 Neolisk21 февр. 2013 г., 16:41
+1 для PARTITION BY.
 pilcrow22 февр. 2013 г., 20:03
@ Неолиск, действительно! Мне бы хотелось, чтобы поддержка (и знание) оконных / аналитических функций была более распространенной.
 Juan Filipe25 апр. 2013 г., 08:13
Это'не работает
 halfer25 апр. 2013 г., 14:10
@Juan: я рекомендую избегать фразы "Это нет работа " - почему-то, кажется, отговаривает писателя говорить о том, что на самом деле происходит (и я часто опускаю руки из-за отсутствия усилий). Что здесь хочет сказать тебе Пикроу, если ты необъяснить? Вы получаете ошибку? Вы получаете результаты? Какие результаты вы получаете? Вы пытались изменить его для вашего конкретного случая использования?

Ваш ответ на вопрос