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

Откуда:
Сообщений: 4
Есть у меня запрос для базы MS SQl ( 2008 ). Половину кода я понял, что означает как работает и откуда какие данные берет. Но вот самое начало я не понимаю синтаксис.
- Инициализируем некоторые переменные
DECLARE @dt_from datetime, @dt_to datetime;
SET @dt_from = DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()), 0); -- Дата начала периода для отчёта
SET @dt_to = DATEADD(MONTH,1,DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()), 0))-1; -- Дата конца периода для отчёта
-- Удаляем, если существуют, временные таблицы
IF (object_id('tempdb..#CallDetails') IS not null) DROP TABLE #CallDetails
IF (object_id('tempdb..#LYNC_BILLING_TEMP_TBL') IS not null) DROP TABLE #LYNC_BILLING_TEMP_TBL
IF (object_id('tempdb..##SENDMAIL_TEMP_TBL') IS not null) DROP TABLE ##SENDMAIL_TEMP_TBL
IF (object_id('tempdb..##SENDMAIL_TEMP_TBL2') IS not null) DROP TABLE ##SENDMAIL_TEMP_TBL2
-- Подготовим исходные данные для отчёта во временную таблицу
SELECT u1.[UserUri] AS [User1Uri], dk.[User1Id], u2.[UserUri] AS [User2Uri], dk.[User2Id],
(SELECT u3.[UserUri] FROM [LcsCDR].[dbo].[Users] AS u3  WHERE u3.[UserId]=dk.[TargetUserId]) AS [TargetUserUri],
dk.[TargetUserId], dk.[SessionStartedById], 
(SELECT u4.[UserUri] FROM [LcsCDR].[dbo].[Users] AS u4  WHERE u4.[UserId]=dk.[ReferredById]) AS [ReferredByUri],
dk.[ReferredById], dk.[ResponseTime], dk.[SessionEndTime]
INTO #CallDetails
FROM [LcsCDR].[dbo].[SessionDetails] AS dk
LEFT OUTER JOIN [LcsCDR].[dbo].[Users] AS u1 ON dk.[User1Id] = u1.[UserId]
LEFT OUTER JOIN [LcsCDR].[dbo].[Users] AS u2 ON dk.[User2Id] = u2.[UserId]
WHERE dk.[ResponseCode]=200 -- Только успешные звонки
AND dk.[SessionEndTime] IS NOT NULL
AND dk.[User1Id] != dk.[User2Id]
AND dk.[MediaTypes] = 16 --1-IM,2-FILE_TRANSFER,4-REMOTE_ASSISTANCE,8-APP_SHARING,16-AUDIO,32-VIDEO,64-APP_INVITE


Собственно, есть база в ней есть таблица dbo.Users. В этой таблице хранятся userID и UserURI. Кто может подсказать, каким методом тут выбираются пользователи? По идее, этот запрос, выбирает всех пользователей за месяц, а как сделать так, чтобы он одного пользователя выбирал. не понятно. Если кто сможет помочь, то я могу весь запрос выложить.
24 май 13, 21:09    [14347568]     Ответить | Цитировать Сообщить модератору
 Re: Кто сможет объяснить кусок запроса SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
Андрей шерман
а как сделать так, чтобы он одного пользователя выбирал. не понятно.
Нужно добавить условие фильтра по одному пользователю.
Видимо, для этой модели данных так:
AND (dk.[User1Id] = @UserId OR dk.[User2Id] = @UserId)
24 май 13, 21:49    [14347664]     Ответить | Цитировать Сообщить модератору
 Re: Кто сможет объяснить кусок запроса SQL  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
alexeyvg
AND (dk.[User1Id] = @UserId OR dk.[User2Id] = @UserId)
AND @UserId IN (dk.[User1Id], dk.[User2Id])
;)
25 май 13, 00:13    [14348218]     Ответить | Цитировать Сообщить модератору
 Re: Кто сможет объяснить кусок запроса SQL  [new]
Андрей шерман
Member

Откуда:
Сообщений: 4
Mnior, т.е. я так понимаю эту строчку надо добавить. А тогда запрос поймет, что надо например сделать выборку для пользователя TestTest ?
25 май 13, 12:29    [14348756]     Ответить | Цитировать Сообщить модератору
 Re: Кто сможет объяснить кусок запроса SQL  [new]
Андрей шерман
Member

Откуда:
Сообщений: 4
Андрей шерман,

вообщем проблема вот в чем. Это запрос делает следующее: Есть такой сервер у меня Lync Server. У него его роль Monitoring, где хранятся, кто сколько куда звонил, когда и сколько денег затратил. Проблема в том, что этот скрипт, выдает мне только одного пользователя и то только почему-то за март месяц, естественно, когда дату на компе меня на март. Далее, если я уберу строчку

AND dk.[User1Id] != dk.[User2Id]
, то показывает меня по всем пользователям. Единственное, я не понимаю просто как тогда он этой строчкой берет определенного пользователя, если я не указывал нигде, что именно он нужен.
25 май 13, 13:18    [14348860]     Ответить | Цитировать Сообщить модератору
 Re: Кто сможет объяснить кусок запроса SQL  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
автор
и то только почему-то за март месяц, естественно, когда дату на компе меня на март

за март вот почему
DECLARE @dt_from datetime, @dt_to datetime;
SET @dt_from = DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()), 0); -- Дата начала периода для отчёта
SET @dt_to = DATEADD(MONTH,1,DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()), 0))-1; -- Дата конца периода для отчёта
25 май 13, 13:20    [14348867]     Ответить | Цитировать Сообщить модератору
 Re: Кто сможет объяснить кусок запроса SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
Mnior
alexeyvg
AND (dk.[User1Id] = @UserId OR dk.[User2Id] = @UserId)

AND @UserId IN (dk.[User1Id], dk.[User2Id])

;)
Ну да, понятно, можно и так написать.
25 май 13, 19:17    [14349485]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить