Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Алгоритм для выборки повторяющихся значений  [new]
Moneo
Member

Откуда:
Сообщений: 33
Добрый день. У меня есть 3 поля строкового типа в одной таблице и значения в этих полях с разными интервалами времени повторяются, но для каждого уникального значения 2 поля значение 3 поля одинаково (пример 1=а, если снова будет 1, то 3 поле=а).

Задача выбрать самые часто встречающиеся значения этих двух полей для значения из уникального поля №1. Сейчас это реализовано так:

1. SELECT DIsTINCT(pole1) from table1, загоняю все значения полученные в список

2. Для каждого элемента списка делаю SELECT DISTINCT(pole2), pole3,pole1 from table1 where pole1 = элемент списка и загоняю полученную выборку pole2 в 2-ой список

3. Считаю для каждого pole2 сколько их: SELECT COUNT(pole2) from table1 where pole =элемент списка и pole2=элемент 2-ого списка и тут же получаю и определяю значения самого часто используемого:

if count>max then
begin
max:=count ;
str2:=pole2;
str3:=pole3;
end;

Все это работает, но очень медленно с учетом количества записей в таблице и понимаю что скорее всего есть способ быстрее функциями SQL - прошу ваших советов и помощи.
21 апр 17, 12:21    [20421778]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
Добрый Э - Эх
Guest
Moneo,

приведи юзабильный репрезентативный набор тестовых данных и желаемый результат на них.
Ибо словесное описание задачи у тебя хромает, как двуногая лошадь...
21 апр 17, 12:26    [20421795]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
Добрый Э - Эх
Guest
Moneo,

но в целом, похоже, что тебе нужен банальный GROUP BY + немного конкатенации поля 2 и поля 3
21 апр 17, 12:27    [20421800]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
Moneo
Member

Откуда:
Сообщений: 33
Решил проблемы с помощью group by pole1,pole2,pole3 having count(*)>3
21 апр 17, 13:00    [20421970]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
Moneo
Member

Откуда:
Сообщений: 33
Хотя нет, это не решило проблемы
21 апр 17, 13:45    [20422248]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
Moneo
Member

Откуда:
Сообщений: 33
Вот запрос, он выводит записи которые повторяются больше одного раза и количество повторений, но мне нужно чтобы он выбрал одну запись где количество повторений максимально.

SELECT code,equipment,namestr,count(*) from project where equipment=мое оборудование' group by code, equipment,namestr HAVING count(*)>1
21 апр 17, 14:16    [20422472]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
o-o
Guest
select top 1 * with ties
from
(
SELECT code,equipment,namestr,count(*) cnt from project where equipment=мое оборудование' group by code, equipment,namestr HAVING count(*)>1
)t
order by cnt desc;
21 апр 17, 14:22    [20422504]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
vborets
Member

Откуда:
Сообщений: 88
Одну любую?

SELECT TOP 1 code,equipment,namestr,count(*)
from project
where equipment=мое оборудование'
group by code, equipment,namestr
HAVING count(*)>1
ORDER BY count(*) DESC
21 апр 17, 14:30    [20422542]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 3530
Moneo
Все это работает, но очень медленно с учетом количества записей в таблице и понимаю что скорее всего есть способ быстрее функциями SQL - прошу ваших советов и помощи.


Использовать оконные функции.

RTFM по "OVER" "PARTITION BY"
21 апр 17, 14:56    [20422668]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
Moneo
Member

Откуда:
Сообщений: 33
Обошелся вариантом с top 1 и order by desc, всем спасибо
21 апр 17, 16:11    [20423076]     Ответить | Цитировать Сообщить модератору
 Re: Алгоритм для выборки повторяющихся значений  [new]
xnews
Member

Откуда:
Сообщений: 1
ого, как им пользоваться?
25 апр 17, 18:15    [20433519]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить