SQL-запрос для ограничения количества строк, имеющих разные значения

0

Есть ли способ в SQL использовать запрос, эквивалентный следующему:

select * from table1, table2 where some_join_condition
and some_other_condition and count(distinct(table1.id)) < some_number;

Скажем, таблица1 представляет собой таблицу сотрудников. Затем соединение приведет к тому, что данные о том, что один сотрудник будет распространен по нескольким строкам. Я хочу ограничить количество отдельных сотрудников, возвращенных на некоторое количество. В этом случае условие на номер строки или что-то подобное не будет достаточным.

Итак, каков наилучший способ получить тот же эффект, что и тот же вывод, что и указанный выше запрос?

Теги:
database
pagination

3 ответа

1
Лучший ответ
select *
from (select * from employee where rownum < some_number and some_id_filter), table2
where some_join_condition and some_other_condition;
  • 0
    о да! это было просто. Я должен был подумать об этом.
1

Это будет работать почти для всех БД

SELECT * 
FROM table1 t1
INNER JOIN  table2 t2
ON some_join_condition
   AND some_other_condition 
INNER JOIN ( 
    SELECT t1.id
    FROM table1 t1
    HAVING 
        count(t1.ID) > someNumber
    ) on t1.id = t1.id

Некоторые БД имеют специальный синтаксис, чтобы сделать это немного eaiser.

0

Возможно, у меня нет полного понимания того, что вы пытаетесь выполнить, но, допустим, вы пытаетесь получить его до 1 строки на одного сотрудника, но каждое соединение вызывает несколько строк на сотрудника и группировку по имени сотрудника и другие поля по-прежнему недостаточно уникальны, чтобы довести их до одной строки, тогда вы можете попробовать использовать ранжирование и разбиение на разделы, а затем выбрать ранг, который вы предпочитаете для каждого раздела сотрудников.

См. пример: http://msdn.microsoft.com/en-us/library/ms176102.aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню