То, что вы получите с помощью решения Лукаса (по состоянию на 1 ноября 2011 г.), вы получите чистая удача .* В СУБД нет «естественного порядка» по определению.Вы зависите от деталей реализации, которые могут измениться в новой версии без предварительного уведомления.Или дамп / восстановление может изменить этот порядок.Он может даже изменить на ровном месте , когда изменяется статистика в БД, и планировщик запросов выбирает другой план, который приводит к другому порядку строк.
Правильный путь чтобы получить «последние n» строк, нужно иметь столбец метки времени или последовательности и ORDER BY
этот столбец.Каждая СУБД, о которой вы только можете подумать, имеет ORDER BY
, поэтому она настолько «универсальна», насколько это возможно.
I цитируйте руководство здесь :
ЕслиORDER BY не задан, строки возвращаются в любом порядке, который система сочтет наиболее быстрым.
Решение Лукаса прекрасно подходит для избежания LIMIT
, которое по-разному реализовано в различных СУБД (например,SQL Server использует TOP n
вместо LIMIT
), но вам нужно до ORDER BY
в любом случае.
Стоит упомянуть, что, хотя оконные функции находятся в SQLстандарт, они все еще не так универсальны, как вы могли бы пожелать.MySQL, например, не поддерживает их.