{"slug":"what-is-relative-volume","qid":"spy_u_shape","label":"SPY: median shares traded per minute, by 30-minute clock bucket (ET, last 30 days, extended hours)","post_title":"What Is RVOL (Relative Volume)? How to Read It","post_url":"/blog/what-is-relative-volume#q-spy_u_shape","columns":["et_time","median_minute_volume_k"],"rows":[{"et_time":"04:00","median_minute_volume_k":0.6},{"et_time":"04:30","median_minute_volume_k":0.3},{"et_time":"05:00","median_minute_volume_k":0.3},{"et_time":"05:30","median_minute_volume_k":0.3},{"et_time":"06:00","median_minute_volume_k":0.4},{"et_time":"06:30","median_minute_volume_k":0.5},{"et_time":"07:00","median_minute_volume_k":1.1},{"et_time":"07:30","median_minute_volume_k":1.6},{"et_time":"08:00","median_minute_volume_k":2.2},{"et_time":"08:30","median_minute_volume_k":3.3},{"et_time":"09:00","median_minute_volume_k":4.7},{"et_time":"09:30","median_minute_volume_k":113.2},{"et_time":"10:00","median_minute_volume_k":82.9},{"et_time":"10:30","median_minute_volume_k":77.6},{"et_time":"11:00","median_minute_volume_k":64.3},{"et_time":"11:30","median_minute_volume_k":52.3},{"et_time":"12:00","median_minute_volume_k":49.3},{"et_time":"12:30","median_minute_volume_k":43.5},{"et_time":"13:00","median_minute_volume_k":43.4},{"et_time":"13:30","median_minute_volume_k":36.8},{"et_time":"14:00","median_minute_volume_k":52.2},{"et_time":"14:30","median_minute_volume_k":54.8},{"et_time":"15:00","median_minute_volume_k":71},{"et_time":"15:30","median_minute_volume_k":152.6},{"et_time":"16:00","median_minute_volume_k":21.7},{"et_time":"16:30","median_minute_volume_k":2.7},{"et_time":"17:00","median_minute_volume_k":1.1},{"et_time":"17:30","median_minute_volume_k":0.7},{"et_time":"18:00","median_minute_volume_k":0.9},{"et_time":"18:30","median_minute_volume_k":0.4},{"et_time":"19:00","median_minute_volume_k":0.4},{"et_time":"19:30","median_minute_volume_k":0.6}],"shape":"series","sql":"SELECT formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,\n       round(quantileDeterministic(0.5)(toFloat64(volume), toUInt64(toUnixTimestamp(window_start))) / 1000, 1) AS median_minute_volume_k\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker = 'SPY'\n  AND window_start >= now() - INTERVAL 30 DAY\n  AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))\nGROUP BY et_time\nHAVING et_time >= '04:00' AND et_time < '20:00'\nORDER BY et_time","computed_at":"2026-08-22T04:34:30.867218+00:00","elapsed":0.10881285}