Advertisement
cahyadsn

MIN,MAX value on windowed data

Aug 30th, 2017
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 5.62 KB | None | 0 0
  1. DROP TABLE IF EXISTS tbl_trans;
  2. CREATE TABLE IF NOT EXISTS tbl_trans(
  3.     transactions VARCHAR(10),
  4.     history DATETIME,
  5.     PRIMARY KEY (transactions,history)
  6. ) ENGINE=MyISAM CHARSET utf8;
  7.  
  8. INSERT INTO tbl_trans
  9. VALUES
  10. ('TRANS-A','2017-08-30 08:00:00'),
  11. ('TRANS-A','2017-08-30 08:10:00'),
  12. ('TRANS-A','2017-08-30 08:20:00'),
  13. ('TRANS-A','2017-08-30 08:30:00'),
  14. ('TRANS-A','2017-08-30 08:40:00'),
  15. ('TRANS-A','2017-08-30 08:50:00'),
  16. ('TRANS-A','2017-08-30 09:00:00'),
  17. ('TRANS-B','2017-08-30 09:10:00'),
  18. ('TRANS-B','2017-08-30 09:20:00'),
  19. ('TRANS-B','2017-08-30 09:30:00'),
  20. ('TRANS-B','2017-08-30 09:40:00'),
  21. ('TRANS-B','2017-08-30 09:50:00'),
  22. ('TRANS-A','2017-08-30 10:00:00'),
  23. ('TRANS-A','2017-08-30 10:10:00'),
  24. ('TRANS-A','2017-08-30 10:20:00'),
  25. ('TRANS-A','2017-08-30 10:30:00'),
  26. ('TRANS-A','2017-08-30 10:40:00'),
  27. ('TRANS-C','2017-08-30 10:50:00'),
  28. ('TRANS-C','2017-08-30 11:00:00'),
  29. ('TRANS-C','2017-08-30 11:10:00'),
  30. ('TRANS-C','2017-08-30 11:20:00'),
  31. ('TRANS-A','2017-08-30 11:30:00'),
  32. ('TRANS-A','2017-08-30 11:40:00'),
  33. ('TRANS-C','2017-08-30 11:50:00'),
  34. ('TRANS-C','2017-08-30 12:00:00'),
  35. ('TRANS-B','2017-08-30 12:10:00'),
  36. ('TRANS-A','2017-08-30 12:20:00'),
  37. ('TRANS-A','2017-08-30 12:30:00'),
  38. ('TRANS-A','2017-08-30 12:40:00'),
  39. ('TRANS-A','2017-08-30 12:50:00');
  40.  
  41. SELECT * FROM tbl_trans;
  42. +--------------+---------------------+
  43. | transactions | history             |
  44. +--------------+---------------------+
  45. | TRANS-A      | 2017-08-30 08:00:00 |
  46. | TRANS-A      | 2017-08-30 08:10:00 |
  47. | TRANS-A      | 2017-08-30 08:20:00 |
  48. | TRANS-A      | 2017-08-30 08:30:00 |
  49. | TRANS-A      | 2017-08-30 08:40:00 |
  50. | TRANS-A      | 2017-08-30 08:50:00 |
  51. | TRANS-A      | 2017-08-30 09:00:00 |
  52. | TRANS-A      | 2017-08-30 10:00:00 |
  53. | TRANS-A      | 2017-08-30 10:10:00 |
  54. | TRANS-A      | 2017-08-30 10:20:00 |
  55. | TRANS-A      | 2017-08-30 10:30:00 |
  56. | TRANS-A      | 2017-08-30 10:40:00 |
  57. | TRANS-A      | 2017-08-30 11:30:00 |
  58. | TRANS-A      | 2017-08-30 11:40:00 |
  59. | TRANS-A      | 2017-08-30 12:20:00 |
  60. | TRANS-A      | 2017-08-30 12:30:00 |
  61. | TRANS-A      | 2017-08-30 12:40:00 |
  62. | TRANS-A      | 2017-08-30 12:50:00 |
  63. | TRANS-B      | 2017-08-30 09:10:00 |
  64. | TRANS-B      | 2017-08-30 09:20:00 |
  65. | TRANS-B      | 2017-08-30 09:30:00 |
  66. | TRANS-B      | 2017-08-30 09:40:00 |
  67. | TRANS-B      | 2017-08-30 09:50:00 |
  68. | TRANS-B      | 2017-08-30 12:10:00 |
  69. | TRANS-C      | 2017-08-30 10:50:00 |
  70. | TRANS-C      | 2017-08-30 11:00:00 |
  71. | TRANS-C      | 2017-08-30 11:10:00 |
  72. | TRANS-C      | 2017-08-30 11:20:00 |
  73. | TRANS-C      | 2017-08-30 11:50:00 |
  74. | TRANS-C      | 2017-08-30 12:00:00 |
  75. +--------------+---------------------+
  76.  
  77. -- query untuk pengelompokan data berdasarkan `transactions` dalam urutan `history`
  78. SELECT
  79.      IF(transactions!=@prev,@num:=@num+1,@num) AS grup,
  80.      @prev:=transactions AS transactions,
  81.      history
  82. FROM tbl_trans
  83.      JOIN (SELECT @prev:=0,@num:=0) init
  84. ORDER BY history;
  85.  
  86. +------+--------------+---------------------+
  87. | grup | transactions | history             |
  88. +------+--------------+---------------------+
  89. |    1 | TRANS-A      | 2017-08-30 08:00:00 |
  90. |    1 | TRANS-A      | 2017-08-30 08:10:00 |
  91. |    1 | TRANS-A      | 2017-08-30 08:20:00 |
  92. |    1 | TRANS-A      | 2017-08-30 08:30:00 |
  93. |    1 | TRANS-A      | 2017-08-30 08:40:00 |
  94. |    1 | TRANS-A      | 2017-08-30 08:50:00 |
  95. |    1 | TRANS-A      | 2017-08-30 09:00:00 |
  96. |    2 | TRANS-B      | 2017-08-30 09:10:00 |
  97. |    2 | TRANS-B      | 2017-08-30 09:20:00 |
  98. |    2 | TRANS-B      | 2017-08-30 09:30:00 |
  99. |    2 | TRANS-B      | 2017-08-30 09:40:00 |
  100. |    2 | TRANS-B      | 2017-08-30 09:50:00 |
  101. |    3 | TRANS-A      | 2017-08-30 10:00:00 |
  102. |    3 | TRANS-A      | 2017-08-30 10:10:00 |
  103. |    3 | TRANS-A      | 2017-08-30 10:20:00 |
  104. |    3 | TRANS-A      | 2017-08-30 10:30:00 |
  105. |    3 | TRANS-A      | 2017-08-30 10:40:00 |
  106. |    4 | TRANS-C      | 2017-08-30 10:50:00 |
  107. |    4 | TRANS-C      | 2017-08-30 11:00:00 |
  108. |    4 | TRANS-C      | 2017-08-30 11:10:00 |
  109. |    4 | TRANS-C      | 2017-08-30 11:20:00 |
  110. |    5 | TRANS-A      | 2017-08-30 11:30:00 |
  111. |    5 | TRANS-A      | 2017-08-30 11:40:00 |
  112. |    6 | TRANS-C      | 2017-08-30 11:50:00 |
  113. |    6 | TRANS-C      | 2017-08-30 12:00:00 |
  114. |    7 | TRANS-B      | 2017-08-30 12:10:00 |
  115. |    8 | TRANS-A      | 2017-08-30 12:20:00 |
  116. |    8 | TRANS-A      | 2017-08-30 12:30:00 |
  117. |    8 | TRANS-A      | 2017-08-30 12:40:00 |
  118. |    8 | TRANS-A      | 2017-08-30 12:50:00 |
  119. +------+--------------+---------------------+
  120.  
  121. -- query untuk mendapatkan nilai MIN() dan MAX() dari data yg sudah dibuat grup-nya
  122. SELECT
  123.     transactions,
  124.     MIN(history) AS startdate,
  125.     MAX(history) AS enddate
  126. FROM
  127.     (
  128.     SELECT
  129.         IF(transactions!=@prev,@grup:=@grup+1,@grup) AS grup,
  130.         @prev:=transactions AS transactions,
  131.         history
  132.     FROM tbl_trans
  133.         JOIN (SELECT @prev:=0,@grup:=0) init
  134.     ORDER BY history
  135.     )
  136.     AS a_table
  137. GROUP BY grup
  138. ORDER BY grup,history;
  139.  
  140. +--------------+---------------------+---------------------+
  141. | transactions | startdate           | enddate             |
  142. +--------------+---------------------+---------------------+
  143. | TRANS-A      | 2017-08-30 08:00:00 | 2017-08-30 09:00:00 |
  144. | TRANS-B      | 2017-08-30 09:10:00 | 2017-08-30 09:50:00 |
  145. | TRANS-A      | 2017-08-30 10:00:00 | 2017-08-30 10:40:00 |
  146. | TRANS-C      | 2017-08-30 10:50:00 | 2017-08-30 11:20:00 |
  147. | TRANS-A      | 2017-08-30 11:30:00 | 2017-08-30 11:40:00 |
  148. | TRANS-C      | 2017-08-30 11:50:00 | 2017-08-30 12:00:00 |
  149. | TRANS-B      | 2017-08-30 12:10:00 | 2017-08-30 12:10:00 |
  150. | TRANS-A      | 2017-08-30 12:20:00 | 2017-08-30 12:50:00 |
  151. +--------------+---------------------+---------------------+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement