еще один на вечеринку # great-n-per-group!
Мой предыдущий код:
select count(*)
from revisions join files on rev_file = file_id
where rev_parent_id like 0
and rev_timestamp between '20011231230000' and '20191231225959'
and file_namespace like 0
and file_is_redirect like 0
Проблема в том, что для некоторых файлов существует несколько записей с rev_parent_id= 0.Я хотел бы сосчитать только те из них, у которых был самый ранний rev_timestamp, но мои попытки использовать ответы в SQL выбирают только строки с максимальным значением в столбце и Выбрать самые ранние дату и время из списка отдельных пользовательских сессий дайте мне приблизительно 9 000 и 11 000 000. Правильное число должно быть примерно 422 000. Возможно, мне не удастся правильно соединить три таблицы, вот одна из моих попыток (эта с 9 000 результатов):
select count(r1.rev_file)
from revisions r1
left outer join revisions r2 on (r1.rev_file = r2.rev_file
and r1.rev_timestamp < r2.rev_timestamp)
join files on r1.rev_file = file_id
where r2.rev_file is NULL
and r1.rev_parent_id like 0
and r1.rev_timestamp between '20011231230000' and '20191231225959'
and file_namespace like 0
and file_is_redirect like 0
Структуры таблиц:
files
file_id, file_namespace, file_is_redirect
1234, 0, 0
1235, 3, 1
1236, 3, 0
revisions
rev_file, rev_id, rev_parent_id, rev_timestamp
1234, 19, 16, 20170302061522
1234, 16, 0, 20170302061428
1234, 14, 12, 20170302061422
1234, 12, 0, 20170302061237
1235, 21, 18, 20170302061815
1235, 18, 13, 20170302061501
1235, 13, 8, 20170302061355
1235, 8, 3, 20170302061213
1235, 3, 0, 20170302061002
1236, 6, 0, 20170302061014
file_id = rev_file = id файла.file_namespace = mimetype файла, 0 является открытым текстом.rev_id = идентификатор ревизии.rev_parent_id = идентификатор родительской ревизии.rev_timestamp = метка времени ревизии
Единственный действительный файл - 1234, он был удален и воссоздан, поэтому он получил две записи rev_parent_id = 0.Я хочу считать файл только в том случае, если между выбранными временами была более ранняя версия rev_parent_id = 0.