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

Откуда:
Сообщений: 2
Добрый день! Помогите разобраться с составлением запроса

Есть таблица В БД со статистикой входящих телефонных разговоров и есть такие столбцы:
date - дата и время звонка
number - номер абонента
result - результат звонка

В результате звонка (result) могут быть значения:
1 - номер не дозвонился
2 - звонок был принят и обработан

Необходимо подсчитать количество номеров, которые сначала позвонили, но не дозвонились (result = 1), а затем перезвонили и их звонок успешно обработали (result = 2) в определенный период времени (datetime_start и datetime_end)

Например:
DateTime | number | result
2016-10-01 12:15:52 | 34232342 | 1
2016-10-01 12:23:12 | 94984598 | 1
2016-10-01 12:31:23 | 75655566 | 2
2016-10-01 12:43:21 | 34232342 | 2
2016-10-01 12:52:25 | 45334634 | 2
2016-10-01 13:01:33 | 12312141 | 1
2016-10-01 13:05:41 | 94984598 | 2

В результате выборки должно получиться: 2
Это номера 34232342 и 94984598, которые сначала позвонили - не дозвонились, а затем перезвонили и их звонок приняли
4 окт 16, 13:34    [19741878]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос в MS SQL  [new]
Добрый Э - Эх
Guest
shamstim,

[not]exists-подзапрос тебе в помощь.
на более-менее свежих версиях сервера - sum() over(partitiob by ... ORDER BY ...)
4 окт 16, 13:48    [19742025]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос в MS SQL  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
declare @t table(t_date datetime,number int, result int)

insert @t
values('2016-10-01 12:15:52',34232342, 1),
('2016-10-01 12:23:12', 94984598,1),
('2016-10-01 12:31:23',75655566,2),
('2016-10-01 12:43:21',34232342,2),
('2016-10-01 12:52:25',45334634,2),
('2016-10-01 13:01:33',12312141,1),
('2016-10-01 13:05:41',94984598,2)

select number 
from @t
group by number
having count(distinct result)>1
4 окт 16, 19:15    [19743539]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос в MS SQL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
declare @t table(t_date datetime,number int, result int)

insert @t
values
('2016-10-01 12:15:52',34232342,1),
('2016-10-01 12:23:12',94984598,1),
('2016-10-01 12:31:23',75655566,2),
('2016-10-01 12:43:21',34232342,2),
('2016-10-01 12:52:25',45334634,2),
('2016-10-01 13:01:33',12312141,1),
('2016-10-01 13:05:41',94984598,2)

SELECT * FROM 
(
	select number, result, LAG(result, 1) OVER (PARTITION BY NUMBER ORDER BY t_date) AS lag_result
	from @t
) A
WHERE result = 2 AND lag_result = 1
4 окт 16, 20:18    [19743722]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос в MS SQL  [new]
Добрый Э - Эх
Guest
3unknown,

а если абонент звонил, к примеру, пять раз - первые два раза не дозвонился, затем был успешный прозвон и после этого - ещё дважды подряд - успешные прозвоны? Думается, в этом случае твой запрос выдаст не тот результат, которого ожидает ТС
5 окт 16, 04:03    [19744407]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос в MS SQL  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
Добрый Э - Эх

Ну и что, все равно комбинация "недозвон-успешный дозвон" (наличие единицы и двойки для одного номера) отловлена будет.
5 окт 16, 09:28    [19744697]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос в MS SQL  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
3unknown,

всё равно он сейчас скажет что не работает и сервер 2008 :)
5 окт 16, 09:33    [19744730]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос в MS SQL  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
TaPaK,

Мой селект и на 2000 работает:).
5 окт 16, 10:57    [19745089]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить