Запрос выборки последних из архива

potap75
Дата: 27.01.2009 14:43:41
Здравствуйте.

Есть таблица (пусть она называется tab), являющаяся по смыслу архивом.
Некоторые поля в ней идентифицируют объект (пусть id1,id2),
одно поле хранит значение показателя (пусть f),
и еще одно поле (пусть d) - дата, за которую это значение получено.

Помогите пожалуйста составить SQL-запрос, получающий "самые последние" данные по всем объектам.

Заранее благодарю.
RADDD
Дата: 27.01.2009 14:49:32
SELECT t1.id1, t1.id2, t1.f, t1.d
FROM Tab t1
WHERE t1.d = (SELECT MAX(t2.d) FROM Tab t2 WHERE t1.id1=t2.id1 AND t1.id2=t2.id1)
Ken@t
Дата: 27.01.2009 14:53:25
declare @tab table
(
  id int
  ,f int
  ,d datetime
)


insert @tab(id,f,d) values(1,2,'20090122')
insert @tab(id,f,d) values(2,1,'20090121')
insert @tab(id,f,d) values(3,2,'20090120')
insert @tab(id,f,d) values(2,2,'20090122')
insert @tab(id,f,d) values(1,2,'20090119')

select top 1 with ties
id,
f,
d
from  @tab
order by row_number() OVER ( partition BY id,f ORDER BY d desc )
да будет так
RADDD
Дата: 27.01.2009 14:54:33

SELECT t1.id1, t1.id2, t1.f, t1.d
FROM Tab t1
WHERE t1.d = (SELECT MAX(t2.d) FROM Tab t2 WHERE t1.id1=t2.id1 AND t1.id2=t2.id2)
potap75
Дата: 27.01.2009 15:09:29
Большое спасибо! Устраивает более короткий вариант от RADDD - проверил - работает. Всемирный разум в очередной раз поразил!
iap
Дата: 27.01.2009 15:12:38
potap75
более короткий вариант от RADDD
potap75
Дата: 27.01.2009 15:14:44
Прошу прощения у Ken@t. Просто не понял, что бОльшая часть Вашего кода это создание таблицы. Сейчас и этот вариант проверю. А как в плане скорости? Какой из вариантов лучше?
potap75
Дата: 27.01.2009 15:16:46
iap,

ну обсмеяли прям! :) ну невнимательно посмотрел, бывает :)
Ken@t
Дата: 27.01.2009 15:32:19
potap75
. А как в плане скорости? Какой из вариантов лучше?

а в каких попугаях мерять будете ?
iap
Дата: 27.01.2009 15:37:54
potap75
iap,

ну обсмеяли прям! :) ну невнимательно посмотрел, бывает :)
Вы не поняли
Во-первых, оригинальный критерий выбора - длина скрипта! При том, что по длине-то как раз скрипт с TOP 1 WITH TIES, может, и покороче будет.
Во-вторых, эти два запроса выдадут разный результат! Например, если максимумов по дате несколько Это ничего?
Ну и версия сервера так и не названа - трудно сравнивать.