Выбор по одной строке из каждой группы.

Harlan
Дата: 18.02.2010 10:13:26
Возможно, что такой вопрос уже был, но не могу сформулировать поисковый запрос.
Есть таблица documents, в которой куча полей, но среди них есть три поля:
DocID (int) identity, -- Идентификатор документа (сквозной номер)
DocType (int), -- Тип документа. Например (1 - платёжное поручение, 2 - ПКО, 3 - РКО и т.д.)
DocDate (DateTime) -- Дата выписки документа.
Мне нужно из таблицы выбрать строки для каждого DocType строку, в которой DocDate было бы максимальным. Т.е. получить последний выписанный документ каждого типа.
Хотелось бы решить эту задачу без привлечения хранимых процедур. Возможно ли такое?
==
А баги ползали и нагло шевелили усами... (с) Не моё.
pkarklin
Дата: 18.02.2010 10:23:22
SELECT
  *
FROM
  Documents D
WHERE
  D.DocID = (SELECT TOP 1 DocID FROM Documents WHERE DocType = D.DocType ORDER BY DocDate DESC)
tpg
Дата: 18.02.2010 10:24:46
Если даты монотонно возрастают с заведением документов, то можно и по простому:
select
   d.*
from documents d
join
   (
   select
      max(DocID) max_DocID
   from documents
   group by DocType
   ) dt on d.DocID = dt.max_DocID
Harlan
Дата: 18.02.2010 10:25:49
Спасибо!
Торможу конкретно...