Выбор каждой n-й строки с условием в SQL
Это кажется концептуально простым вопросом, но без однозначного ответа.
У меня есть данные, требующие много времени, с целой кучей (миллионов) уникальных событий, заданных переменной event_ID, описывающих набор (из нескольких) физических свойств (phys_props).
Я пишу SQL и хочу возвращать каждую n-ю строку (где у меня есть свобода выбора, например, 5, 1000, 10000 и т. Д.) Для этого набора данных временного ряда.
Однако, если, например, n=1000 и для данного физического свойства меньше 1000 записей, я вообще не хочу возвращать туда записи event_ID.
Что-то вроде:
SELECT *
FROM myTable
WHERE MOD(myTable, 1000) = 0
моя отправная точка.
3 ответа
Вы можете дать уникальный номер каждой строке, а затем выполнить расчет по уникальному номеру. Что-то вроде этого
with t as(
select *,row_number() over (order by event_ID) SN from the_table_name
)
select * from t where SN%100=0
Вы можете попробовать что-то вроде этого:
SELECT * FROM
(SELECT EVENT_ID,
@rownum := @rownum + 1 AS rank
FROM myTable,
(SELECT @rownum := 0) r
) ds
WHERE MOD(rank, 5) = 0
;
Вы можете попробовать это:
Select * from myTable
Having mod(count(*), 1000)=0