powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что-то типа DISTINCT...
22 сообщений из 22, страница 1 из 1
Что-то типа DISTINCT...
    #32069803
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю
Код: plaintext
1.
2.
3.
4.
5.
6.
select messages.messageid, Messages.[Text],
       Queue.QueueID

from Messages with (nolock)
inner join Queue with (nolock)
  on Queue.MessageID = Messages.MessageID


Причем каждому Messages.MessageID может соответствовать несколько записей в Queue c этим с Queue.MessageID = Messages.MessageID!!!


Как отобрать только неповторяющиеся записи из полученного Recordset'а/Table'а???


Заранее спасибо!
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069807
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
Select messages.messageid, Messages.[Text], Queue.QueueID
From Messages with (nolock)
Inner join Queue with (nolock)
  on Queue.MessageID = Messages.MessageID
Group by messages.messageid, Messages.[Text],
       Queue.QueueID
Having Count (Queue.MessageID) =  1 
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069809
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А они и так не повторяются, потому что записи различаются полем Queue.QueueID
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069810
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно так, но различение будет идти по двум столбцам messages.messageid, Messages.[Text]
Код: plaintext
1.
2.
3.
4.
select distnict messages.messageid, Messages.[Text]

from Messages with (nolock)
inner join Queue with (nolock)
  on Queue.MessageID = Messages.MessageID


Если убрать Messages.[Text]
Код: plaintext
1.
select distinct messages.messageid
from Messages with (nolock)

Но уж тогда лучше
Код: plaintext
1.
2.
select  Queue.QueueID
from Queue with (nolock)
  

Таким образом вопрос: Что для Вас неповторяющаяся запись? по messages.messageid или(и) по Messages.[Text]?
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069813
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неповторяющаяся запись - запись, у кот. отличаются MessageID.

P.S.: QueueID - PK, и хочется не убирать [Text]...
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069815
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сперва реши, что делать с различными QueueID в "повторяющихся" записях, тогда вопрос отпадет сам собой.
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069816
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сперва реши, что делать с различными QueueID в "повторяющихся" записях, тогда вопрос отпадет сам собой.

А что с ними надо делать? Они в результирующую таблицу не должны попасть!

Или я не очень понял Вас?
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069819
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сделал так (вроде бы всё правильно, но... ->):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select * from
(
select messages.messageid, Messages.[Text],
       Queue.QueueID

from Messages with (nolock)
inner join Queue with (nolock)
  on Queue.MessageID = Messages.MessageID
) as Results

where MessageID in (select MessageID from Results group by MessageID)


Но QA выдает:

Invalid object name 'Results'.


What's wrong?
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069821
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, видно вечер сказывается. Если QueueID не должно попасть в результирующую выборку, то почему это поле перечислено в SELECT в качестве 3-ей колонки после [Text]?
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069822
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. надо получить только одну запись по messages.messageid и при ней должен быть произвольный Messages.[Text]?

Зачем произвольный текст?
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069825
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это для наглядности запроса и для показа того, что есть PK в виде QueueID, может кому-нибудь, кто смог бы мне дать решение это поле понадобилось...

Так что мне делать-то??? Как решить проблему-то?
Кстати, через создание переменной типа table вида
Код: plaintext
1.
2.
3.
4.
5.
DECLARE 
    {{ @local_variable data_type } 
        | { @cursor_variable_name CURSOR } 
        | { table_type_definition } 
    } [ ,...n]


не хочется делать, т.к. приходится описывать все возвращаемые поля recordset'а
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069828
dkstranger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select*
from messages where
MessageId in (select MessageId from Queue)
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069832
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Лëля

Messages.[Text] - одинаковый для одного MessageID.

Но в выводимых записях повторяются Queue.MessageID...
привожу пример того, что выводится после запроса

Код: plaintext
1.
2.
3.
4.
5.
6.
select TOP  6  messages.messageid, Messages.[Text],
       Queue.DeliveryID

from Messages with (nolock)
inner join Queue with (nolock)
  on Queue.MessageID = Messages.MessageID


messageid Text DeliveryID
----------- -------------------------------------------------- -----------
1 С добрым утром!
1 С добрым утром!
2 С добрым утром 2!
2 С добрым утром 2!
3 С добрым утром! 333
4 С добрым утром! 444

(10 row(s) affected)

(на самом деле помимо всех указанных полей выводится ещё с 10 полей - в запросе ещё куча inner join'ов
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069833
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой, не 10 rows affected, а 6
Сорри!
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069842
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, я поняла наборот, что Queue и Message один ко многим

Попробуйте

Код: plaintext
1.
2.
select Messages.messageid,Messages.[Text]  from Messages 
Where Messages.messageid  in (select distinct Queue.MessageID from Queue)
  

Конечно, это не грамотно, но демонстрирует связи
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069846
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, я поняла наборот, что Queue и Message один ко многим

Попробуйте

select Messages.messageid,Messages.[Text] from Messages
Where Messages.messageid in (select distinct Queue.MessageID from Queue)




Конечно, это не грамотно, но демонстрирует связи


Да это всё можно сделать без труда и вложенными запросами вышеприведённого Вами типа, но на 10 и более таблицах, которые связываются по ключевым и FK-полям, размерами в несколько десятков миллионов записей этот запрос будет длится несколько минут (а может и более), а с inner join'ом это несомненно будет в несколько раз быстрее и правильнее.

Хотелось бы решить проблему, используя конструкции inner (left/right outer) join... И тем более - время на выполнение данного запроса должно укладываться в реальный промежуток времени (несколько (десятков) секунд), т.к. запрос производится чуть ли не каждые 10-15 минут...

P.S.: Может данная проблема и не имеет решения, если использовать join'ы???
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069849
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас "каждому Messages.MessageID может соответствовать несколько записей в Queue c этим с Queue.MessageID = Messages.MessageID", то каую запись из Queue вам надо отображать ?
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069850
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини, но я не понимаю чем тебя DISTINCT не устраивает?

Ведь он именно и отсечет все записи с абсолютно одинаковым содержимым.

Т.е. вместо приведенного тобой результата

messageid Text DeliveryID
----------- -------------------------------------------------- -----------
1 С добрым утром!
1 С добрым утром!
2 С добрым утром 2!
2 С добрым утром 2!
3 С добрым утром! 333
4 С добрым утром! 444

ты получишь

messageid Text DeliveryID
----------- -------------------------------------------------- -----------
1 С добрым утром!
2 С добрым утром 2!
3 С добрым утром! 333
4 С добрым утром! 444

Если это не то, что тебе надо, то ты лучше приведи по несколько записей из обоих таблиц и какой результат тебе надо получить.
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32069989
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Хотелось бы решить проблему, используя конструкции inner (left/right outer) join...

В чем проблема- загадка, но хочется с join...

Ловите (пусть люди не смеются)
Код: plaintext
1.
2.
3.
select Messages.messageid,Messages.[Text]  from Messages 
inner join
(select distinct Queue.MessageID from Queue) as q
ON Messages.messageid=q.MessageID


Есть все: и join и distinct

если хотите right - это слово можно использовать вместо inner- результат будет такой же

A вот с left результат м.б. немного другим....
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32070241
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, этот вышепредложенный код работает правильно, однако вот этот код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
select DeliveryID,
       pagers.pagernum, pagers.pagerid, pagers.domain,
       pbx_mes.nmessage, pbx_mes.begintime, pbx_mes.internalnum, pbx_mes.externalnum, pbx_mes.opid,
       messages.messageid, Messages.[Text]

from Messages with (nolock)

inner join (select distinct Queue.MessageID, PagerID, DeliveryID from Queue with (nolock) group by MessageID, PagerID, DeliveryID) as Q 
  on Messages.MessageID=Q.MessageID

 --inner join Queue with (nolock)
 
 --  on Queue.MessageID = Messages.MessageID
 

inner join Pagers with (nolock)
  on Pagers.PagerID = Q.PagerID

left outer join PBX_Mes with (nolock)
  on Messages.NMessage = PBX_Mes.NMessage

inner join operators with (nolock)
  on Operators.OpID = PBX_Mes.OpID

 --where pbx_mes.internalnum=9700201
 
where PagerNum = '970020111'
  and Domain = 'flextel.ru'

order by BeginTime;

всё-равно выводит строки с повторяющимися MessageID:

DeliveryID pagernum pagerid domain nmessage begintime internalnum externalnum opid messageid Text
----------- --------------- ----------- ------------------------- ----------- -------------------------------------------------- ----------- --------------- ---- ----------- --------------------------------------------------
1691456 970020111 27646 flextel.ru 1190096 2002-10-22 11:35:25.000 9700201 2570688 23 3512951 Миша, перезвони, пожалуйста, в "Юнион пейдж". Надя
1691457 970020111 27646 flextel.ru 1190096 2002-10-22 11:35:25.000 9700201 2570688 23 3512951 Миша, перезвони, пожалуйста, в "Юнион пейдж". Надя
1691458 970020111 27646 flextel.ru 1190096 2002-10-22 11:35:25.000 9700201 2570688 23 3512951 Миша, перезвони, пожалуйста, в "Юнион пейдж". Надя
1718644 970020111 27646 flextel.ru 1237888 2002-10-29 14:58:36.000 9700201 9299499 66 3528717 Запреты на 30.10 - 0912 0922 1044 1054, выдал Кузь
1718645 970020111 27646 flextel.ru 1237888 2002-10-29 14:58:36.000 9700201 9299499 66 3528717 Запреты на 30.10 - 0912 0922 1044 1054, выдал Кузь
1718646 970020111 27646 flextel.ru 1237888 2002-10-29 14:58:36.000 9700201 9299499 66 3528717 Запреты на 30.10 - 0912 0922 1044 1054, выдал Кузь
1722829 970020111 27646 flextel.ru 1245062 2002-10-30 15:15:37.000 9700201 9407056 93 3531086 тест <9407056>
1722827 970020111 27646 flextel.ru 1245062 2002-10-30 15:15:37.000 9700201 9407056 93 3531086 тест <9407056>
1722828 970020111 27646 flextel.ru 1245062 2002-10-30 15:15:37.000 9700201 9407056 93 3531086 тест <9407056>
1722834 970020111 27646 flextel.ru 1245089 2002-10-30 15:17:22.000 9700201 9407056 67 3531090 тест<9407056>
1722835 970020111 27646 flextel.ru 1245089 2002-10-30 15:17:22.000 9700201 9407056 67 3531090 тест<9407056>
1722836 970020111 27646 flextel.ru 1245089 2002-10-30 15:17:22.000 9700201 9407056 67 3531090 тест<9407056>
1754233 970020111 27646 flextel.ru 1311163 2002-11-09 14:18:34.000 9700201 9299499 29 3549238 Звонил Соболев из Радиоскан. Передал на 10.11 запр
1754234 970020111 27646 flextel.ru 1311163 2002-11-09 14:18:34.000 9700201 9299499 29 3549238 Звонил Соболев из Радиоскан. Передал на 10.11 запр
1754235 970020111 27646 flextel.ru 1311163 2002-11-09 14:18:34.000 9700201 9299499 29 3549238 Звонил Соболев из Радиоскан. Передал на 10.11 запр

(15 row(s) affected)


Так где же всё-таки копать?
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32070264
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите внимательно на результаты по столбцам.
DeliveryID - каждый раз другой.
Вот этим записи и различаются.
Попробуйте убрать этот столбец из запроса.
----------
А также будьте внимательны с полем begintime
Попробуйте не использовать эти 2 поля в своем запросе (и при группировке тоже)
и потом смотрите результат

Удачи!
...
Рейтинг: 0 / 0
Что-то типа DISTINCT...
    #32070290
-=Extreme=-ShamaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Greate THANX =)))))))))))))))))))))))))))))
I LoVe MS SQL 2000 ;)))
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что-то типа DISTINCT...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]