2015-09-08 2 views
0

У меня есть таблица с иерархией образцов. Поле sample_number является ключевым и родительские образцы идентифицируются полем parent_aliquot. Для данного родительского образца существует от 0 до 20 выборок аликвоты. Каждый образец аликвоты также индексируется внутри родительского образца по полю aliquot_number. можно выбрать все аликвоты для родительских образцов:Выберите n количество выборок из исходных образцов

select s2.sample_number, s1.sample_number, s1.aliquot_number 
from sample s1 
inner join sample s2 on s2.sample_number = s1.parent_aliquot 
order by s2.sample_number, s1.aliquot_number desc 

Но хотелось бы, чтобы выбрать все Аликвотные образцы, но 2 (или N) для каждого родительского образца, в результате чего два образца с самым низким aliquot_number (который не может быть 1 и 2). Как это можно сделать?

ответ

0

Вы можете использовать ROW_NUMBER в следующем:

select sample_number, sample_number, aliquot_number 
from (
    select s2.sample_number, s1.sample_number, s1.aliquot_number, 
      row_number() over(partition by parent_aliquot order by aliquot_number) rn 
    from sample s1 
    inner join sample s2 on s2.sample_number = s1.parent_aliquot 
    )x 
where rn <= 2 -- here you specify how many rows you want to retrieve 
order by sample_number, aliquot_number desc 
Смежные вопросы