Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. +--------------+-----------+-----------------------+
  2. | energy_usage | device_id | timestamp |
  3. +--------------+-----------+-----------------------+
  4. | 10 | 1 | 2019-02-12T01:00:00 |
  5. | 16 | 2 | 2019-02-12T01:00:00 |
  6. | 26 | 1 | 2019-03-12T02:00:00 |
  7. | 24 | 2 | 2019-03-12T02:00:00 |
  8. +--------------+-----------+-----------------------+
  9.  
  10. +--------------+------------------+--------------------+-----------+------------+
  11. | energy_usage | energy_usage_day | energy_usage_night | device_id | date |
  12. +--------------+------------------+--------------------+-----------+------------+
  13. | 80 | 30 | 50 | 1 | 2019-06-02 |
  14. | 130 | 60 | 70 | 2 | 2019-06-03 |
  15. +--------------+------------------+--------------------+-----------+------------+
  16.  
  17. WITH temp AS (
  18. SELECT *, SUM(usage) OVER(win) > 50 qualified,
  19. SUM(usage) OVER(win) - 50 rolling_sum,
  20. EXTRACT(HOUR FROM timestamp) BETWEEN 8 AND 19 day_hour,
  21. EXTRACT(MONTH FROM timestamp) month,
  22. FORMAT_TIMESTAMP("%Y-%m-%d", timestamp) date
  23. FROM `project.dataset.table`
  24. WINDOW win AS (PARTITION BY device_id, TIMESTAMP_TRUNC(timestamp, MONTH) ORDER BY timestamp)
  25. ), temp_with_adjustments AS (
  26. SELECT *,
  27. IF(
  28. ROW_NUMBER() OVER(PARTITION BY device_id, MONTH ORDER BY timestamp) = 1,
  29. rolling_sum,
  30. usage
  31. ) AS adjusted_energy_usage
  32. FROM temp
  33. WHERE qualified
  34. )
  35. SELECT ROUND(SUM(adjusted_energy_usage), 4) energy_usage,
  36. ROUND(SUM(IF(day_hour, adjusted_energy_usage, 0)), 4) energy_usage_day,
  37. ROUND(SUM(IF(NOT day_hour, adjusted_energy_usage, 0)), 4) energy_usage_night,
  38. device_id,
  39. date
  40. FROM temp_with_adjustments
  41. GROUP BY device_id, date
  42.  
  43. +--------------+-----------+-----------------------+
  44. | usage_charge | device_id | timestamp |
  45. +--------------+-----------+-----------------------+
  46. | 0.2 | 1 | 2019-02-12T01:00:00 |
  47. | 0.6 | 2 | 2019-02-12T01:00:00 |
  48. | 0.1 | 1 | 2019-03-12T02:00:00 |
  49. | 1.2 | 2 | 2019-03-12T02:00:00 |
  50. +--------------+-----------+-----------------------+
  51.  
  52. +--------------+------------------+--------------------+--------------+------------------+--------------------+-----------+------------+
  53. | energy_usage | energy_usage_day | energy_usage_night | usage_charge | usage_charge_day | usage_charge_night | device_id | date |
  54. +--------------+------------------+--------------------+--------------+------------------+--------------------+-----------+------------+
  55. | 80 | 30 | 50 | 1.2 | 0.4 | 0.8 | 1 | 2019-06-02 |
  56. | 130 | 60 | 70 | 2.5 | 1 | 1.5 | 2 | 2019-06-03 |
  57. +--------------+------------------+--------------------+--------------+------------------+--------------------+-----------+------------+
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement