Наличие row_number () означает, что вам приходится иметь дело с гораздо меньшим количеством коррелированных подзапросов.Решение @Bill Karwin работает (+1);Вот еще одна версия, которая делает то же самое, но это может быть немного легче следовать.(Я использовал datetime для определения порядка.)
-- Test table
CREATE TABLE Test
( Id int not null
,Loaded datetime not null
)
-- Load dummy data with made-up distinct datetimes
INSERT Test values (3, 'Jan 1, 2010')
INSERT Test values (3, 'Jan 2, 2010')
INSERT Test values (3, 'Jan 5, 2010')
INSERT Test values (3, 'Jan 7, 2010')
INSERT Test values (6, 'Feb 1, 2010')
INSERT Test values (6, 'Feb 11, 2010')
INSERT Test values (7, 'Mar 31, 2010')
-- The query
SELECT t1.Id, count(*) Counter
from Test t1
inner join Test t2
on t2.Id = t1.Id
and t2.Loaded <= t1.Loaded
group by t1.Id, t1.Loaded
-- Clean up when done
DROP TABLE Test
Важно отметить, что без хороших индексов (и, возможно, даже с ними) такие запросы могут работать очень плохо, особенно в больших таблицах.Тщательно проверяйте и оптимизируйте!