многоуровневый запрос

guess
Дата: 17.02.2010 18:15:18
есть таблица с полями: id, name, iss, ver, idat, udat
как выбрать такие строки где name = name, но ver максимальная для этого name, если ver равные, то выбирать ту у кот iss больше, если iss равны то сравнение по idat, если и они равны то, сравнивать по udat


select * from head where
id in (select id from head as h2 where
h2.iss = (select max(h.iss) from head as h where h.name=h2.name)
and h2.ver = (select max(h3.ver) from head h3 where h3.name=h2.name)
Паганель
Дата: 17.02.2010 18:21:19
Ну и описание задачи...
select top 1 with ties * 
 from head
order by row_number() over(partition by name order by ver desc, iss desc, idat desc, udat desc)
ЗЫ само собой, не проверял
guess
Дата: 18.02.2010 11:36:08
нужно для каждого name выбрать такую запись где, iss максимальное, если iss равны, то ver max, если ver равны, то выбрать где idat max, если idat равны то, udat max
Паганель
Дата: 18.02.2010 11:52:36
Что изменилось в задаче? iss и ver местами поменялись?
Поменяйте их местами в "моем" запросе
Результат устраивает?
guess
Дата: 18.02.2010 12:10:50
ошибка:
'row_number' is not a recognized function name.
хотя SQL Server 2005
Glory
Дата: 18.02.2010 12:11:21
guess

хотя SQL Server 2005

И как вы это проверели ?
guess
Дата: 18.02.2010 12:20:14
Glory
guess

хотя SQL Server 2005

И как вы это проверели ?


select @@version
guess
Дата: 18.02.2010 12:22:46
да, пардон сервер 2000, на 2005 запрос работает. Но дело в том, что данная база есть и на 2000 и на 2005
Паганель
Дата: 18.02.2010 12:33:42
select * 
  from head as h1
 where not exists (select 'не важно что'
                     from head as h2
                    where h2.iss > h1.iss
                       or h2.iss = h1.iss and h2.ver > h1.ver
                       or h2.iss = h1.iss and h2.ver = h1.ver and h2.idat > h1.idat
                       or h2.iss = h1.iss and h2.ver = h1.ver and h2.idat = h1.idat and h2.udat > h1.udat
                   )
?
guess
Дата: 18.02.2010 12:45:42
нет.
и сравнивать таким образом: h2.idat > h1.idat не корректно, т.к. если idat примет значения например 4,5,6, то вернется строка и там где idat = 5, и там где idat =6, т.к. 5>4 и 6>5 и в том, и другом, случае условие выполняется. все эти извращения уже рассматривались...