Advertisement
WorkAkkaunt

СИС. Общее число звонков.

Jul 10th, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.18 KB | None | 0 0
  1. DECLARE @DATE_START  DATETIME = '07-10-2019 00:00:00.000'
  2. DECLARE @DATE_FINISH DATETIME = '07-10-2019 00:00:00.000'
  3. DECLARE @TIME_START  DATETIME = '01-01-1900 01:00:00.001'
  4. DECLARE @TIME_FINISH DATETIME = '01-01-1900 23:00:00.001'
  5.  
  6. DECLARE @NUMBERS TABLE(Number nvarchar(50))
  7. INSERT @NUMBERS VALUES('84957772515')
  8. INSERT @NUMBERS VALUES('84956821244')
  9.  
  10. DECLARE @FilteredConnections0 TABLE(TimeStart datetime, TimeStop datetime, OperId nvarchar(50), IdChain nvarchar(50), Number nvarchar(50), ConnectionType int)
  11.  
  12. INSERT INTO @FilteredConnections0
  13. SELECT
  14.     TimeStart
  15.     ,TimeStop
  16.     ,BLineID
  17.     ,IdChain
  18.     ,AOutNumber
  19.     ,ConnectionType
  20. FROM [oktell].[dbo].[A_Stat_Connections_1x1] as ascs WITH (NOLOCK)
  21. RIGHT JOIN @NUMBERS as n
  22. ON n.Number = ascs.AOutNumber
  23.  
  24. --select * from @FilteredConnections0
  25.  
  26. DECLARE @FilteredConnections TABLE(TimeStart datetime, TimeStop datetime, OperId nvarchar(50), IdChain nvarchar(50), Number nvarchar(50))
  27.  
  28. --ФИЛЬТРУЕМ ТАБЛИЦУ И СОХРАНЯЕМ В ПЕРЕМЕННОЙ
  29. INSERT INTO @FilteredConnections
  30. SELECT
  31.     TimeStart
  32.     ,TimeStop
  33.     ,OperId
  34.     ,IdChain
  35.     ,Number
  36. FROM @FilteredConnections0
  37. WHERE CAST(TimeStart AS date) BETWEEN CAST(@DATE_START AS date) AND CAST(@DATE_FINISH AS date)
  38.     AND CAST(TimeStart AS time) BETWEEN CAST(@TIME_START AS time) AND CAST(@TIME_FINISH AS time)
  39.     AND (ConnectionType = 5 OR ConnectionType = 6)
  40. ----------------------------------------------------
  41.  
  42. DELETE @FilteredConnections0
  43.  
  44. --СЧИТАЕМ ОБРАБОТАННЫЕ ЗВОНКИ И ВРЕМЯ РАЗГОВОРА
  45. DECLARE @LenTalking TABLE(LenTalking int, Number nvarchar(50))
  46. DECLARE @LenTalking2 TABLE(LenTalking int, Number nvarchar(50), [Count] int)
  47.  
  48. INSERT INTO @LenTalking
  49. SELECT DATEDIFF(SECOND,TimeStart, TimeStop), Number
  50. FROM @FilteredConnections
  51.  
  52. INSERT INTO @LenTalking2
  53. SELECT SUM(LenTalking), Number, COUNT(Number)
  54. FROM @LenTalking
  55. GROUP BY NUMBER
  56. ---------------------------------------------------------
  57. DELETE @LenTalking
  58. --select * from @LenTalking2
  59.  
  60. --СЧИТАЕМ ВРЕМЯ ОЖИДАНИЯ
  61. DECLARE @RingTime TABLE(RingLen float, Number nvarchar(50))
  62. DECLARE @RingTime2 TABLE(RingLen float, Number nvarchar(50))
  63.  
  64. INSERT INTO @RingTime
  65. SELECT RingMs / 1000, Number
  66. FROM @FilteredConnections as sc
  67. JOIN [oktell].[dbo].[A_Stat_RingTime] as rt
  68. ON sc.TimeStart = rt.StartDT
  69.  
  70. INSERT INTO @RingTime2
  71. SELECT SUM(RingLen), Number
  72. FROM @RingTime
  73. GROUP BY Number
  74. ----------------------------------------------------------
  75. DELETE @RingTime
  76. --select * from @RingTime2
  77.  
  78. --СЧИТАЕМ ПРОПУЩЕННЫЕ ЗВОНКИ
  79. DECLARE @Missed TABLE(Number nvarchar(50))
  80. DECLARE @Missed2 TABLE([Count] int, Number nvarchar(50))
  81.  
  82. INSERT INTO @Missed
  83. SELECT fc.Number
  84. FROM @FilteredConnections as fc
  85. JOIN [oktell].[dbo].[A_Stat_MissedCalls] AS sm
  86. ON fc.IdChain = sm.IdChain
  87.  
  88. INSERT INTO @Missed2
  89. SELECT COUNT(NUMBER), Number
  90. FROM @Missed
  91. GROUP BY Number
  92. --------------------------------------------------------------
  93. DELETE @Missed
  94. --select * from @Missed2
  95.  
  96. --СЧИТАЕМ ПОТЕРЯННЫЕ ЗВОНКИ
  97. DECLARE @Failed TABLE(Number nvarchar(50))
  98. DECLARE @Failed2 TABLE([Count] int, Number nvarchar(50))
  99.  
  100. INSERT INTO @Failed
  101. SELECT fc.Number
  102. FROM @FilteredConnections as fc
  103. JOIN [oktell].[dbo].[A_Stat_FailedCalls] AS sm
  104. ON fc.IdChain = sm.IdChain
  105.  
  106. DELETE @FilteredConnections
  107.  
  108. INSERT INTO @Failed2
  109. SELECT COUNT(NUMBER), Number
  110. FROM @Failed
  111. GROUP BY Number
  112. --------------------------------------------------------------
  113. DELETE @Failed
  114. --select * from @Failed2
  115.  
  116. --СЧИТАЕМ ВСЕ ЗВОНКИ
  117. DECLARE @Final TABLE(Number nvarchar(50), [Count] int)
  118. DECLARE @Final2 TABLE(Number nvarchar(50), [Count] int)
  119.  
  120. INSERT INTO @Final
  121. SELECT Number, [Count]
  122. FROM @LenTalking2
  123. UNION
  124. SELECT Number, [Count]
  125. FROM @Failed2
  126. UNION
  127. SELECT Number, [Count]
  128. FROM @Missed2
  129.  
  130. INSERT INTO @Final2
  131. SELECT Number, SUM(Count)
  132. FROM @Final
  133. GROUP BY Number
  134. ---------------------------------------------------------------
  135. DELETE @Final
  136. --select * from @Final2
  137. DECLARE @FinalTable TABLE(Number nvarchar(50), [All] int, Checked int, Failed int, Missed int, TimeWaiting int, TimeTalking int)
  138.  
  139. INSERT INTO @FinalTable
  140. SELECT
  141.     lt.Number
  142.     ,fin.[Count]
  143.     ,lt.[Count]
  144.     ,f.[Count]
  145.     ,m.[Count]
  146.     ,r.RingLen / lt.[Count]
  147.     ,lt.LenTalking / fin.[Count]
  148. FROM @LenTalking2 as lt
  149. LEFT JOIN @Missed2 as m
  150.     ON m.Number = lt.Number
  151. LEFT JOIN @Final2 as fin
  152.     ON fin.Number = lt.Number
  153. LEFT JOIN @Failed2 as f
  154.     ON f.Number = lt.Number
  155. LEFT JOIN @RingTime2 as r
  156.     ON r.Number = lt.Number
  157.  
  158. DELETE @LenTalking2
  159. DELETE @Missed2
  160. DELETE @Final2
  161. DELETE @Failed2
  162. DELETE @RingTime2
  163.  
  164. select Number as 'Номер'
  165.     ,ISNULL([All], 0) as 'Итого'
  166.     ,ISNULL(Checked, 0) as 'Обработано'
  167.     ,ISNULL(Failed, 0) as 'Потеряно'
  168.     ,ISNULL(Missed, 0) as 'Пропущено'
  169.     ,CONCAT(TimeWaiting / 3600, '.', TimeWaiting / 60 - (TimeWaiting / 3600) * 3600, '.', TimeWaiting - (TimeWaiting / 60) * 60) as 'Среднее время ожидания'
  170.     ,CONCAT(TimeTalking / 3600, '.', TimeTalking / 60 - (TimeTalking / 3600) * 60, '.', TimeTalking - (TimeTalking / 60) * 60) as 'Среднее время разговора'
  171. from @FinalTable
  172. ORDER BY Number
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement