Вам нужно ОГРАНИЧИТЬ данные, которые вы возвращаете, на какой процентиль находятся возвращаемые строки в наборе результатов.
Попробуйте это:
SELECT TrackingID, OpenTime, FirstPoint
FROM PointsTable
ORDER BY FirstPointGMT - OpenTimeGMT
LIMIT (13*((SELECT COUNT(*) FROM PointsTable) +1) / 100),
((SELECT COUNT(*) FROM PointsTable)
-
(26*((SELECT COUNT(*) FROM PointsTable) +1) / 100)
)
Объяснение вышесказанного
Единственная сложность здесь - это предложение Limit и его синтаксис:
> LIMIT start_row,number_of_rows_to_return
Наш start_row должен быть первым элементом после первой записи 13/100-й (13% пути) в наборе результатов. Для этого мы используем следующую формулу:
rownumber_or_number_of_rows_in_resultset_Npercent_in =
( Npercent * ( number_of_rows_in_resultset + 1) / 100)
, что (13*((SELECT COUNT(*) FROM PointsTable) +1) / 100)
.
Нашим number_of_rows_to_return должно быть общее количество строк минус 26% строк (13% снизу и 13% сверху) или
(total_number_of_rows - number_of_rows_26percent_of_the_way_in)
Таким образом, фактический расчет:
( (SELECT COUNT(*) FROM PointsTable)
-
(26*((SELECT COUNT(*) FROM PointsTable) +1) / 100)
)
РЕДАКТИРОВАТЬ: После просмотра ответа Нияза, я понял, что запрос может быть переписан как:
SELECT TrackingID, OpenTime, FirstPoint
FROM PointsTable
ORDER BY FirstPointGMT - OpenTimeGMT
LIMIT (13*((SELECT COUNT(*) FROM PointsTable) +1) / 100),
(74*((SELECT COUNT(*) FROM PointsTable) +1) / 100)
Это чище, поскольку исключает третий вложенный запрос и должно быть функционально эквивалентным. Ограничьте ряды, начните со строк 13% сверху и покажите 74% всех строк вне таблицы с этой точки.