Advertisement
Guest User

Untitled

a guest
Sep 28th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.44 KB | None | 0 0
  1. date number
  2. ---- ------
  3. 1 3
  4. 2 NULL
  5. 3 5
  6. 4 NULL
  7. 5 NULL
  8. 6 2
  9. .......
  10.  
  11. DECLARE @Table TABLE(
  12. ID INT,
  13. Val INT
  14. )
  15.  
  16. INSERT INTO @Table (ID,Val) SELECT 1, 3
  17. INSERT INTO @Table (ID,Val) SELECT 2, NULL
  18. INSERT INTO @Table (ID,Val) SELECT 3, 5
  19. INSERT INTO @Table (ID,Val) SELECT 4, NULL
  20. INSERT INTO @Table (ID,Val) SELECT 5, NULL
  21. INSERT INTO @Table (ID,Val) SELECT 6, 2
  22.  
  23.  
  24. SELECT *,
  25. ISNULL(Val, (SELECT TOP 1 Val FROM @Table WHERE ID < t.ID AND Val IS NOT NULL ORDER BY ID DESC))
  26. FROM @Table t
  27.  
  28. UPDATE mytable
  29. SET number = (@n := COALESCE(number, @n))
  30. ORDER BY date;
  31.  
  32. SQL> select *
  33. 2 from mytable
  34. 3 order by id
  35. 4 /
  36.  
  37. ID SOMECOL
  38. ---------- ----------
  39. 1 3
  40. 2
  41. 3 5
  42. 4
  43. 5
  44. 6 2
  45.  
  46. 6 rows selected.
  47.  
  48. SQL> select id
  49. 2 , last_value(somecol ignore nulls) over (order by id) somecol
  50. 3 from mytable
  51. 4 /
  52.  
  53. ID SOMECOL
  54. ---------- ----------
  55. 1 3
  56. 2 3
  57. 3 5
  58. 4 5
  59. 5 5
  60. 6 2
  61.  
  62. 6 rows selected.
  63.  
  64. SQL>
  65.  
  66. UPDATE mytable
  67. SET
  68. @n = COALESCE(number, @n),
  69. number = COALESCE(number, @n)
  70. ORDER BY date
  71.  
  72. DECLARE @A TABLE(ID INT, Val INT)
  73.  
  74. INSERT INTO @A(ID,Val) SELECT 1, 3
  75. INSERT INTO @A(ID,Val) SELECT 2, NULL
  76. INSERT INTO @A(ID,Val) SELECT 3, 5
  77. INSERT INTO @A(ID,Val) SELECT 4, NULL
  78. INSERT INTO @A(ID,Val) SELECT 5, NULL
  79. INSERT INTO @A(ID,Val) SELECT 6, 2
  80.  
  81. UPDATE D
  82. SET D.VAL = E.VAL
  83. FROM (SELECT A.ID C_ID, MAX(B.ID) P_ID
  84. FROM @A AS A
  85. JOIN @A AS B ON A.ID > B.ID
  86. WHERE A.Val IS NULL
  87. AND B.Val IS NOT NULL
  88. GROUP BY A.ID) AS C
  89. JOIN @A AS D ON C.C_ID = D.ID
  90. JOIN @A AS E ON C.P_ID = E.ID
  91.  
  92. SELECT * FROM @A
  93.  
  94. CREATE TABLE test(mysequence INT, mynumber INT);
  95.  
  96. INSERT INTO test VALUES(1, 3);
  97. INSERT INTO test VALUES(2, NULL);
  98. INSERT INTO test VALUES(3, 5);
  99. INSERT INTO test VALUES(4, NULL);
  100. INSERT INTO test VALUES(5, NULL);
  101. INSERT INTO test VALUES(6, 2);
  102.  
  103. SELECT t1.mysequence, t1.mynumber AS ORIGINAL
  104. , (
  105. SELECT t2.mynumber
  106. FROM test t2
  107. WHERE t2.mysequence = (
  108. SELECT MAX(t3.mysequence)
  109. FROM test t3
  110. WHERE t3.mysequence <= t1.mysequence
  111. AND mynumber IS NOT NULL
  112. )
  113. ) AS CALCULATED
  114. FROM test t1;
  115.  
  116. UPDATE MyTable
  117. SET MyNullValue = MyDate
  118. WHERE MyNullValue IS NULL
  119.  
  120. SELECT t."date",
  121. x."number" AS "number"
  122. FROM @Table t
  123. JOIN @Table x
  124. ON x."date" = (SELECT TOP 1 z."date"
  125. FROM @Table z
  126. WHERE z."date" <= t."date"
  127. AND z."number" IS NOT NULL
  128. ORDER BY z."date" DESC)
  129.  
  130. UPDATE t
  131. SET t."number" = x."number"
  132. FROM @Table t
  133. JOIN @Table x
  134. ON x."date" = (SELECT TOP 1 z."date"
  135. FROM @Table z
  136. WHERE z."date" < t."date" --//@note: < and not <= here, as = not required
  137. AND z."number" IS NOT NULL
  138. ORDER BY z."date" DESC)
  139. WHERE t."number" IS NULL
  140.  
  141. SELECT (SELECT last(val)
  142. FROM tab AS temp
  143. WHERE tab.id >= temp.id AND temp.val IS NOT NULL) AS val2, *
  144. FROM tab;
  145.  
  146. UPDATE TABLE
  147. SET number = (SELECT MAX(t.number)
  148. FROM TABLE t
  149. WHERE t.number IS NOT NULL
  150. AND t.date < date)
  151. WHERE number IS NULL
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement