Advertisement
WorkAkkaunt

Потерянные звонк и GETT

Aug 1st, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 7.04 KB | None | 0 0
  1. DECLARE @DATE_START DATETIME = '20190727 00:00'
  2. DECLARE @DATE_END DATETIME = '20190730 23:59'
  3.  
  4. DECLARE @TIME_START DATETIME = '19000101 00:00'
  5. DECLARE @TIME_END DATETIME = '19000101 23:00'
  6.  
  7. DECLARE @TASKS TABLE (Id uniqueidentifier)
  8. INSERT INTO @TASKS
  9. SELECT id
  10. FROM [oktell_settings].[dbo].[A_TaskManager_Tasks]
  11.  
  12. DECLARE @OPERATORS TABLE (Id uniqueidentifier)
  13. INSERT INTO @OPERATORS
  14. SELECT TOP 200 id
  15. FROM [oktell_settings].[dbo].[A_Users]
  16. -------------------------------------------------------------------------------------------------------------------------
  17.  
  18. ----ФИЛЬТРУЕМ СТАРТОВУЮ ТАБЛИЦУ---------------------------------------------------------
  19. DECLARE @Filtered TABLE
  20.     (
  21.         IdEffort uniqueidentifier, IdChain uniqueidentifier, IdOperator uniqueidentifier
  22.         , CallResult int , UserResult int
  23.         , TimeStart datetime, LenTime int
  24.     )
  25.  
  26. INSERT INTO @Filtered  
  27. SELECT IdEffort
  28.     , IdChain
  29.     , IdOperator
  30.     , CallResult
  31.     , UserResult
  32.     , DateTimeStart
  33.     , LenTime
  34. FROM [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections]
  35. WHERE DateTimeStart BETWEEN @DATE_START AND @DATE_END
  36.     AND TimeStart BETWEEN @TIME_START AND @TIME_END
  37.     AND IdTask IN (SELECT * FROM @TASKS)
  38.     AND IdOperator IS NOT NULL
  39.     AND IdOperator != 'AB000000-0000-0000-0000-000000000000'
  40.  
  41. DELETE @TASKS
  42. ---------------------------------------------------------------------------------------------------
  43.  
  44. ----ОТФИЛЬТРОВАННЫЕ ПО ОПЕРАТОРАМ------------------------------------------------------------------
  45. DECLARE @FilteredWithOpers TABLE
  46.     (
  47.         IdEffort uniqueidentifier, IdChain uniqueidentifier, IdOperator uniqueidentifier
  48.         , CallResult int , UserResult int
  49.         , TimeStart datetime, LenTime int
  50.     )
  51.  
  52. INSERT INTO @FilteredWithOpers 
  53. SELECT *
  54. FROM @Filtered
  55. WHERE IdOperator IN (SELECT * FROM @OPERATORS)
  56.  
  57. DELETE @OPERATORS
  58. -------------------------------------------------------------------------------------------------------
  59.  
  60. -----СЧИТАЕМ ЗВОНКИ ПО ЗАДАЧАМ БЕЗ ОПЕРАТОРОВ----------------------------------------------------------
  61. DECLARE @Temp TABLE(IdOperator uniqueidentifier, IdEffort uniqueidentifier, CallResult int)
  62.  
  63. INSERT INTO @Temp
  64. SELECT F.IdOperator, F.IdEffort, F.CallResult
  65. FROM @FilteredWithOpers AS FO
  66. RIGHT JOIN @Filtered AS F
  67.     ON FO.IdOperator = F.IdOperator
  68. WHERE FO.IdOperator IS NULL
  69.  
  70. DECLARE @FailedByTask TABLE (Id uniqueidentifier, IdEffort uniqueidentifier)
  71.  
  72. INSERT INTO @FailedByTask
  73. SELECT IdOperator, IdEffort
  74. FROM @Temp
  75. WHERE CallResult != 5
  76. GROUP BY IdOperator, IdEffort
  77.  
  78.  
  79. DECLARE @failed_by_task int =
  80. (
  81.     SELECT COUNT(*)
  82.     FROM @FailedByTask
  83. )
  84.  
  85. DECLARE @SuccessByTask TABLE (Id uniqueidentifier, IdEffort uniqueidentifier)
  86.  
  87. INSERT INTO @SuccessByTask
  88. SELECT IdOperator, IdEffort
  89. FROM @Temp
  90. WHERE CallResult = 5
  91. GROUP BY IdOperator, IdEffort
  92.  
  93.  
  94. DECLARE @success_by_task int =
  95. (
  96.     SELECT COUNT(*)
  97.     FROM @SuccessByTask
  98. )
  99.  
  100. DELETE @Temp
  101. DELETE @FailedByTask
  102. DELETE @SuccessByTask
  103. DELETE @Filtered
  104.  
  105. --PRINT @failed_by_task
  106. --PRINT @success_by_task
  107. ------------------------------------------------------------------------------------------------------------------
  108.  
  109. -----СЧИТАЕМ ЗВОНКИ ПО ОПЕРАТОРАМ------------------------------------------------------------------
  110. DECLARE @AllCalls TABLE (Id uniqueidentifier, [Count] int)
  111.  
  112. INSERT INTO @AllCalls
  113. SELECT IdOperator
  114.     , COUNT(DISTINCT IdEffort)
  115. FROM @FilteredWithOpers
  116. GROUP BY IdOperator
  117.  
  118. DECLARE @SuccessCalls TABLE (Id uniqueidentifier, [Count] int, LenTime int)
  119.  
  120. INSERT INTO @SuccessCalls
  121. SELECT IdOperator
  122.     , COUNT(DISTINCT IdEffort)
  123.     , AVG(LenTime)
  124. FROM @FilteredWithOpers
  125. WHERE CallResult = 5
  126. GROUP BY IdOperator
  127.  
  128. DECLARE @FailedCalls TABLE (Id uniqueidentifier, [Count] int)
  129.  
  130. INSERT INTO @FailedCalls
  131. SELECT IdOperator
  132.     , COUNT(DISTINCT IdEffort)
  133. FROM @FilteredWithOpers
  134. WHERE CallResult != 5
  135. GROUP BY IdOperator
  136.  
  137. DELETE @FilteredWithOpers
  138. -------------------------------------------------------------------------------------------------------------
  139. --select * from @AllCalls
  140. --select * from @SuccessCalls
  141. --select * from @FailedCalls
  142.  
  143. DECLARE @Result TABLE ([Name] nvarchar(50), [All] int, Success int, Failed int, AvgTime nvarchar(20))
  144.  
  145. INSERT @Result VALUES('А По задачам', @success_by_task + @failed_by_task, @success_by_task, @failed_by_task, NULL)
  146.  
  147. INSERT INTO @Result
  148. SELECT OI.[Name]
  149.     , ISNULL(AC.[Count], 0)
  150.     , ISNULL(SC.[Count], 0)
  151.     , ISNULL(FC.[Count], 0)
  152.     , (SELECT [dbo].[GetTimeFromSecond](SC.LenTime))
  153. FROM @AllCalls as AC
  154. LEFT JOIN [oktell_cc_temp].[dbo].[A_Cube_CC_Cat_OperatorInfo] as OI
  155.     ON AC.Id = OI.Id
  156. LEFT JOIN @SuccessCalls as SC
  157.     ON AC.Id = SC.Id
  158. LEFT JOIN @FailedCalls as FC
  159.     ON AC.Id = FC.Id
  160.  
  161. DECLARE @Total TABLE ([Name] nvarchar(50), [All] int, Success int, Failed int, AvgTime nvarchar(20))
  162.  
  163. INSERT INTO @Total
  164. SELECT 'Всего'
  165.     , SUM([All])
  166.     , SUM(Success)
  167.     , SUM(Failed)
  168.     , NULL
  169. FROM @Result
  170.  
  171. SELECT * FROM @Total
  172. UNION
  173. SELECT * FROM @Result
  174. ORDER BY [Name] DESC
  175.  
  176. Информацию извлекал из таблиц - EffortConnections
  177.  
  178. Удачные звонки от неудачных я отделял по таблице EffortConnections по полю CallResult
  179.  
  180. Примерный Расчет сложности выполнения запроса:
  181.  
  182. Размер таблицы EffortConnections = EC; OperatorInfo = OI
  183. Размеры фильтров - Дата = d; Таски = t; Операторы = x
  184.  
  185. Fa - сложность функции подсчета среднего
  186. Fs - сложность функции подсчета суммы
  187. Fsec - сложность функции получения секунд от времени
  188. Fcast, F/
  189.  
  190. Join - коэффицент сложности джойна => 0 <= Join <= 1
  191.     Самый низкий, если джойн по int.
  192.     Средний если join по uniqueidentifier
  193.     Высокий если join по nvarchar
  194.  
  195. Знак равно задает приблизительное соответсвие
  196.  
  197. 1.) Filtered
  198.     Сложность построения = O(EC * t)
  199.     Длина = O(d)
  200.  
  201. 2.) FilteredWithOpers
  202.     Сложность построения = O(d * x)
  203.     Длина = O(d - OI) = O(d - 636) = O(d)
  204.  
  205. 3.) Temp
  206.     Сложность построения = F * FO * J = O[(d^2) * J]
  207.     Длина = F - FO = O(d)
  208.  
  209. 4.) failed_by_task = success_by_task
  210.     Сложность построения = 2 * T = O(d)
  211.     Длина = O(d / 2) = O(d)
  212.  
  213. 5.) AllCalls = SuccessCalls = FailedCalls
  214.     Сложность построения = FO * x^2 = O(dx^2)
  215.     Длина = O(d / x)
  216.  
  217. 6.) Result
  218.     Сложность построения = (AC * SC * FC) * J^2 * (3Fnull + Fsec) = O[(d^3 / x^3) * J^2]
  219.     Длина = O(d / x) = AC
  220.  
  221. 7.) Total
  222.     Сложность построения = AC = O(d / x)
  223.     Длина = 1
  224.  
  225. 8.) Сложность построения = AC + 1 = O(d / x)
  226.  
  227. Сложность построения суммарная =
  228. O [
  229.     EC * t + (3d^3 / x^3) * (2 + J^2) + Jd^2 + d(3x^2 + x + 2)
  230.   ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement