Попробуйте:
Select * From Table t
Where (Select Count(*) From Table
Where pkCol < t.PkCol) <=
(Select Count(*)+1 From Table)/2
целочисленное деление должно относиться к тому, что вы хотите сделать с оператором модуля ...
, чтобы устранить недостаток понимания в приведенном ниже комментарии:если таблица имеет четное количество записей, скажем, 20, то count(*) = 20
, Count(*) + 1 = 21
и (Count(*)+1) / 2 = 10
, запрос вернет все записи, в которых количество записей с pk меньше его pk меньше или равнодо 10, то есть половина записей.
Если существует нечетное количество записей, скажем, 21, то count(*) = 21
, Count(*) + 1 = 22
и (Count(*)+1) / 2 = 11
.запрос вернет все записи, в которых количество записей с pk меньше его pk меньше или равно 11, т. е. половина записей плюс одна, то же самое, что и при использовании оператора модуля.