Postgres принимает константы только в предложении limit. Таким образом, решение выше не работает.
Ваш выбор выглядит примерно так:
SELECT *
FROM (SELECT T.HEIGHT,
-- this tells us the "ranking" of each row
-- by counting all the heights that are small than
-- height in the that row
(SELECT COUNT(*) + 1
FROM <table> T1
WHERE T1.HEIGHT < T.HEIGHT
) AS RANK,
-- this tells us the count of rows in the table
(SELECT COUNT(*)
FROM <table> T1
) AS REC_COUNT
FROM <table> T
ORDER BY T.HEIGHT
) T
-- now just list rows wich ranking is between (not top30) and (not bottom30)
WHERE T.RANK BETWEEN (T.REC_COUNT*0.30) AND (T.REC_COUNT*0.70)
Это сработает в любой базе данных, которая принимает подвыборы (подзапросы).
Это не относится к равенствам в "высотах", но это можно сделать с помощью первичного ключа
SELECT COUNT(*) + 1
FROM <table> T1
WHERE (T1.HEIGHT < T.HEIGHT)
OR (T1.HEIGHT = T.HEIGHT and T1.PK_FIELD < T.PK_FIELD)
Привет.