Advertisement
42ama

150

Mar 25th, 2020
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. WITH maxDate
  2. AS
  3. (
  4. SELECT point, MAX(date) AS date
  5. FROM Income
  6. GROUP BY point
  7. ),
  8. minDate
  9. AS
  10. (
  11. SELECT point, MIN(date) AS date
  12. FROM Income
  13. GROUP BY point
  14. ),
  15. lagLeadAll
  16. AS
  17. (
  18. SELECT LAG(date) OVER (ORDER BY date, point) AS lag,
  19. point,
  20. date,
  21. LEAD(date) OVER (ORDER BY date, point) AS lead
  22. FROM Income
  23. ),
  24. leadLagDistinct
  25. AS
  26. (
  27. SELECT lag, point, date, lead
  28. FROM lagLeadAll
  29. WHERE date != lag OR date != lead
  30. ),
  31. minMax
  32. AS
  33. (
  34. SELECT mad.point, mid.date AS minDate, mad.date AS maxDate
  35. FROM maxDate mad
  36. JOIN minDate mid ON mad.point = mid.point
  37. ),
  38. almostFinal
  39. AS
  40. (
  41. SELECT
  42. mm.point,
  43. CASE
  44. WHEN lag.lag != minDate
  45. THEN lag.lag
  46. ELSE NULL
  47. END AS lag,
  48. minDate,
  49. maxDate,
  50. CASE
  51. WHEN lead.lead != maxDate
  52. THEN lead.lead
  53. ELSE NULL
  54. END AS lead
  55. FROM minMax mm
  56. LEFT JOIN leadLagDistinct lag ON mm.minDate = lag.date AND mm.point = lag.point
  57. LEFT JOIN leadLagDistinct lead ON mm.maxDate = lead.date AND mm.point = lead.point
  58. )
  59. SELECT *
  60. FROM almostFinal
  61. WHERE
  62. NOT (lag IS NULL AND lead IS NULL)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement