Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что-то типа DISTINCT... / 22 сообщений из 22, страница 1 из 1
19.11.2002, 18:07:00
    #32069803
-=Extreme=-ShamaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Делаю
Код: 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
19.11.2002, 18:22:25
    #32069807
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Код: 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
19.11.2002, 18:26:06
    #32069809
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
А они и так не повторяются, потому что записи различаются полем Queue.QueueID
...
Рейтинг: 0 / 0
19.11.2002, 18:26:24
    #32069810
Лëля
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Можно так, но различение будет идти по двум столбцам 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
19.11.2002, 18:34:28
    #32069813
-=Extreme=-ShamaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Неповторяющаяся запись - запись, у кот. отличаются MessageID.

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

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

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

Код: 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
19.11.2002, 18:54:26
    #32069821
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Мда, видно вечер сказывается. Если QueueID не должно попасть в результирующую выборку, то почему это поле перечислено в SELECT в качестве 3-ей колонки после [Text]?
...
Рейтинг: 0 / 0
19.11.2002, 18:56:19
    #32069822
Лëля
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Т.е. надо получить только одну запись по messages.messageid и при ней должен быть произвольный Messages.[Text]?

Зачем произвольный текст?
...
Рейтинг: 0 / 0
19.11.2002, 19:05:19
    #32069825
-=Extreme=-ShamaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Это для наглядности запроса и для показа того, что есть 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
19.11.2002, 19:10:13
    #32069828
dkstranger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
select*
from messages where
MessageId in (select MessageId from Queue)
...
Рейтинг: 0 / 0
19.11.2002, 19:16:35
    #32069832
-=Extreme=-ShamaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
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
19.11.2002, 19:18:13
    #32069833
-=Extreme=-ShamaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Ой, не 10 rows affected, а 6
Сорри!
...
Рейтинг: 0 / 0
19.11.2002, 19:45:48
    #32069842
Лëля
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Прошу прощения, я поняла наборот, что Queue и Message один ко многим

Попробуйте

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

Конечно, это не грамотно, но демонстрирует связи
...
Рейтинг: 0 / 0
19.11.2002, 19:54:20
    #32069846
-=Extreme=-ShamaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Прошу прощения, я поняла наборот, что 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
19.11.2002, 20:09:31
    #32069849
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Если у вас "каждому Messages.MessageID может соответствовать несколько записей в Queue c этим с Queue.MessageID = Messages.MessageID", то каую запись из Queue вам надо отображать ?
...
Рейтинг: 0 / 0
19.11.2002, 20:11:29
    #32069850
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Извини, но я не понимаю чем тебя 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
20.11.2002, 10:45:09
    #32069989
Лëля
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
>Хотелось бы решить проблему, используя конструкции 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
20.11.2002, 15:51:36
    #32070241
-=Extreme=-ShamaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Да, этот вышепредложенный код работает правильно, однако вот этот код
Код: 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
20.11.2002, 16:08:50
    #32070264
Лëля
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что-то типа DISTINCT...
Посмотрите внимательно на результаты по столбцам.
DeliveryID - каждый раз другой.
Вот этим записи и различаются.
Попробуйте убрать этот столбец из запроса.
----------
А также будьте внимательны с полем begintime
Попробуйте не использовать эти 2 поля в своем запросе (и при группировке тоже)
и потом смотрите результат

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


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