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

Откуда:
Сообщений: 3
Таблица контактов оператора dbo.Contacts:
[CaseID] int, -- ид дела
[OperatorID] int, -- ид оператора (его уникальный номер)
[ContactDate] datetime, -- дата создания контакта
[ContactResultID] tinyint -- ид контакта, который создал оператор

Пример:

CaseID____OperatorID___ContactDate__________ContactResultID
1__________10_____2016-01-03 08:07:23.000______1
2__________11_____2016-01-03 08:16:32.000______2
1__________12_____2016-01-03 08:20:12.000______1
4__________13_____2016-01-03 08:20:16.000______3
5__________14_____2016-01-03 08:22:18.000______2
1__________15_____2016-01-03 08:24:36.000______4
2__________16_____2016-01-03 08:25:27.000______5
3__________17_____2016-01-03 08:26:20.000______1
9__________18_____2016-01-03 08:27:13.000______2
5__________19_____2016-01-03 08:28:32.000______3


Таблица платежей dbo.Payments:
[CaseID] int,
[PayDate] date,
[PaySum] float

CaseID___PayDate____PaySum
1_____03.01.2016___122121
2_____02.01.2016___12121
1_____03.01.2016___34
4_____04.01.2016___115
5_____05.01.2016___3
1_____06.01.2016___3
2_____07.01.2016___1212
3_____08.01.2016___3434
9_____09.01.2016___34
5_____10.01.2016___53344


Задание:
Посчитать кол-во уникальных выполненных обещаний за 2016 год в разрезе оператора dbo.Contacts.OperatorID.
ContactResultID=1 – это ид контакта «Обещание».
Выполненным обещанием считается, если дата соответствующего контакта оператора dbo.Contacts.[ContactDate] находится в промежутке dbo.Payments.PayDate +/-2 дня.

Примечание:
На одно и то же дело dbo.Contacts.CaseID обещание dbo.Contacts. ContactResultID =1 могут поставить несколько операторов dbo.Contacts.OperatorID,
поэтому, если есть несколько обещаний, которые попадают в промежуток dbo.Payments.PayDate +/-2 дня нужно взять только 1-но то, которое было поставлено оператором раньше.

Результат вывести в виде:
Operatorid___PTPCount
10________545
11________12154
12________122121
13________545
14________2323
15________45
16________56567
17________4545
18________2323
19________1212

Где PTPCount – кол-во уникальных выполненных обещаний.
Помогите пожалуйста. Если есть возможность с обоснованием.
12 апр 18, 15:28    [21333728]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с Базой  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36693
И что не получается?
12 апр 18, 16:09    [21333912]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с Базой  [new]
aleks222
Member

Откуда:
Сообщений: 850
/*
Таблица контактов оператора dbo.Contacts:
[CaseID] int, -- ид дела
[OperatorID] int, -- ид оператора (его уникальный номер)
[ContactDate] datetime, -- дата создания контакта
[ContactResultID] tinyint -- ид контакта, который создал оператор


Таблица платежей dbo.Payments:
[CaseID] int,
[ContactDate] date,
[PaySum] float

Задание:
Посчитать кол-во уникальных выполненных обещаний за 2016 год в разрезе оператора dbo.Contacts.OperatorID.
ContactResultID=1 – это ид контакта «Обещание».
Выполненным обещанием считается, если дата соответствующего контакта оператора dbo.Contacts.[ContactDate] находится в промежутке dbo.Payments.PayDate +/-2 дня.

Примечание:
На одно и то же дело dbo.Contacts.CaseID обещание dbo.Contacts. ContactResultID =1 могут поставить несколько операторов dbo.Contacts.OperatorID,
поэтому, если есть несколько обещаний, которые попадают в промежуток dbo.Payments.PayDate +/-2 дня нужно взять только 1-но то, которое было поставлено оператором раньше.

*/

-- платежи с привязкой к оператору
with c as ( select * from dbo.Contacts where ContactResultID = 1 )
   , p as ( select * from dbo.Payments )
  select p.*, c.[OperatorID]
    from p
         outer apply( select top(1) * from c where c.[CaseID] = p.[CaseID] and c.[ContactDate] between dateadd( day, 2, p.[ContactDate] ) and dateadd( day, 2, p.[ContactDate] ) order by c.[ContactDate] asc ) as x
;

-- ну а дальше то, какие проблемы?
with c as ( select * from dbo.Contacts where ContactResultID = 1 )
   , p as ( select * from dbo.Payments )
   , pc as ( select p.*, c.[OperatorID]
                from p
                     cross apply( select top(1) * from c where c.[CaseID] = p.[CaseID] and c.[ContactDate] between dateadd( day, 2, p.[ContactDate] ) and dateadd( day, 2, p.[ContactDate] ) order by c.[ContactDate] asc ) as x
            )
  select [OperatorID], PTPCount  = count(*) from pc group by [OperatorID]
;

-- ой, чую я коллекторское агентство...
12 апр 18, 16:21    [21333983]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с Базой  [new]
aleks222
Member

Откуда:
Сообщений: 850
А чорт, не прошел я тестирование...
-- платежи с привязкой к оператору
with c as ( select * from dbo.Contacts where ContactResultID = 1 )
   , p as ( select * from dbo.Payments )
  select p.*, c.[OperatorID]
    from p
         outer apply( select top(1) * from c where c.[CaseID] = p.[CaseID] and c.[ContactDate] between dateadd( day, - 2, p.[ContactDate] ) and dateadd( day, 2, p.[ContactDate] ) order by c.[ContactDate] asc ) as с
;

-- ну а дальше то, какие проблемы?
with c as ( select * from dbo.Contacts where ContactResultID = 1 )
   , p as ( select * from dbo.Payments )
   , pc as ( select p.*, c.[OperatorID]
                from p
                     cross apply( select top(1) * from c where c.[CaseID] = p.[CaseID] and c.[ContactDate] between dateadd( day, - 2, p.[ContactDate] ) and dateadd( day, 2, p.[ContactDate] ) order by c.[ContactDate] asc ) as с
            )
  select [OperatorID], PTPCount  = count(*) from pc group by [OperatorID]
;
12 апр 18, 16:25    [21334000]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с Базой  [new]
akafash
Member

Откуда:
Сообщений: 3
aleks222,
Это тест на сообеседовании, сказали будем все эти базы изучать, я этого всего не знаю, но изначально нужно решить данное задание, тоесть разобраться где как и в чем. Я не совсем понимаю куда нужно вставлять данный код. Я сейчас читаю литературу по акцесу, правильно? Вношу туда данные. А вот с кодами что делать я не совсем понимаю.
12 апр 18, 17:23    [21334302]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с Базой  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36693
akafash
Я сейчас читаю литературу по акцесу, правильно? Вношу туда данные. А вот с кодами что делать я не совсем понимаю.
Если у вас база данных в Аксессе, то зачем вы морочите людям голову и задаете вопрос в ветке по MSSQL?
12 апр 18, 17:25    [21334309]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с Базой  [new]
akafash
Member

Откуда:
Сообщений: 3
Гавриленко Сергей Алексеевич, Не в акцессе она, просто я не имею представления что именно делать и копаю во все стороны. Объясните в чем работать пожалуйста. И что там сделать?
12 апр 18, 18:00    [21334483]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с Базой  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
akafash,

без сарказма - ищи другую вакансию
13 апр 18, 04:50    [21335328]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить