Advertisement
WorkAkkaunt

Курсор для гетт такси рабочее время

Jul 9th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.18 KB | None | 0 0
  1. /****** Script for SelectTopNRows command from SSMS  ******/
  2. DECLARE @dt1 DATETIME = '20190703 00:00'
  3. DECLARE @dt2 DATETIME ='20190704 23:59'
  4. DECLARE @tm1 DATETIME = '19000101 00:00'
  5. DECLARE @tm2 DATETIME = '19000101 23:59'
  6.  
  7. DECLARE @C_UserStates CURSOR
  8.  
  9. DECLARE @TestTable TABLE (UserId uniqueidentifier, [State] int, TimeChange datetime, ICode int);
  10.  
  11. DECLARE @FilteredTable TABLE (UserId uniqueidentifier, [State] int, TimeChange datetime, ICode int);
  12.  
  13. INSERT INTO @FilteredTable
  14. SELECT UserId, [State], TimeChange, ICode
  15.   FROM [oktell].[dbo].[A_UserStateHistory]
  16. where TimeChange between @dt1 and @dt2 and UserId = '9EE34782-68B6-4C6C-819F-CD352D670BCF'
  17. ORDER BY TimeChange
  18.  
  19. SET @C_UserStates  = CURSOR SCROLL
  20. FOR
  21. SELECT * FROM @FilteredTable
  22.  
  23. DECLARE @Count int
  24. SET @Count =
  25. (SELECT COUNT(*)
  26.     FROM @FilteredTable)
  27.  
  28. DECLARE @Iterator int
  29. SET @Iterator = 0
  30.  
  31. DECLARE @UserId uniqueidentifier
  32. DECLARE @State int
  33. DECLARE @TimeChange datetime
  34. DECLARE @ICode int
  35.  
  36. DECLARE @TempCode int
  37. SET @TempCode = -1
  38.  
  39.  
  40. OPEN @C_UserStates
  41.  
  42. WHILE @Iterator != @Count
  43.     BEGIN
  44.         FETCH @C_UserStates INTO @UserId,@State,@TimeChange,@ICode;
  45.         IF @ICode = 0
  46.             INSERT @TestTable VALUES(@UserId,@State,@TimeChange,@ICode)
  47.         ELSE
  48.             BEGIN
  49.                 IF @TempCode = 0
  50.                 INSERT @TestTable VALUES(@UserId,@State,@TimeChange,@ICode)
  51.             END
  52.        
  53.         SET @TempCode = @ICode
  54.         SET @Iterator = @Iterator + 1
  55.     END
  56.  
  57. CLOSE @C_UserStates
  58.  
  59. DECLARE @FinalTable TABLE(UserId uniqueidentifier, [State] int, LenTime float, ICode int)
  60.  
  61. DECLARE @C_Half CURSOR
  62.  
  63. SET @C_Half  = CURSOR SCROLL
  64.     FOR
  65.     SELECT * FROM @TestTable
  66.  
  67. SET @Count = (SELECT COUNT(*) FROM @TestTable)
  68. SET @Iterator = 0
  69. OPEN @C_Half
  70.  
  71. DECLARE @startTime datetime
  72. DECLARE @endTime datetime
  73. SET @TempCode = -1
  74.  
  75. WHILE @Iterator != @Count
  76.     BEGIN
  77.         FETCH @C_Half INTO @UserId,@State,@TimeChange,@ICode;
  78.         IF @startTime IS NOT NULL AND @TempCode = 0
  79.             BEGIN
  80.                 SET @endTime = @TimeChange
  81.                 INSERT @FinalTable VALUES(@UserId, @State, datediff(SECOND, @startTime, @endTime), @ICode)
  82.             END
  83.         SET @TempCode = @ICode
  84.         SET @startTime = @TimeChange
  85.         SET @Iterator = @Iterator + 1
  86.     END
  87.  
  88. CLOSE @C_Half
  89. select SUM(LenTime) from @FinalTable
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement