Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Moneo Member Откуда: Сообщений: 61 |
Добрый день. У меня есть 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] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
Moneo, приведи юзабильный репрезентативный набор тестовых данных и желаемый результат на них. Ибо словесное описание задачи у тебя хромает, как двуногая лошадь... |
21 апр 17, 12:26 [20421795] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
Moneo, но в целом, похоже, что тебе нужен банальный GROUP BY + немного конкатенации поля 2 и поля 3 |
21 апр 17, 12:27 [20421800] Ответить | Цитировать Сообщить модератору |
Moneo Member Откуда: Сообщений: 61 |
Решил проблемы с помощью group by pole1,pole2,pole3 having count(*)>3 |
21 апр 17, 13:00 [20421970] Ответить | Цитировать Сообщить модератору |
Moneo Member Откуда: Сообщений: 61 |
Хотя нет, это не решило проблемы |
21 апр 17, 13:45 [20422248] Ответить | Цитировать Сообщить модератору |
Moneo Member Откуда: Сообщений: 61 |
Вот запрос, он выводит записи которые повторяются больше одного раза и количество повторений, но мне нужно чтобы он выбрал одну запись где количество повторений максимально. SELECT code,equipment,namestr,count(*) from project where equipment=мое оборудование' group by code, equipment,namestr HAVING count(*)>1 |
21 апр 17, 14:16 [20422472] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
vborets Member Откуда: Сообщений: 166 |
Одну любую? 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] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4824 |
Использовать оконные функции. RTFM по "OVER" "PARTITION BY" |
||
21 апр 17, 14:56 [20422668] Ответить | Цитировать Сообщить модератору |
Moneo Member Откуда: Сообщений: 61 |
Обошелся вариантом с top 1 и order by desc, всем спасибо |
21 апр 17, 16:11 [20423076] Ответить | Цитировать Сообщить модератору |
xnews Member Откуда: Сообщений: 1 |
ого, как им пользоваться? |
25 апр 17, 18:15 [20433519] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |