{"slug":"what-is-the-nbbo","qid":"aapl_updates_by_clock","label":"AAPL: average NBBO updates per minute by half-hour bucket (ET, 4 a.m. to 8 p.m.)","post_title":"What Is the NBBO? National Best Bid and Offer","post_url":"/blog/what-is-the-nbbo#q-aapl_updates_by_clock","columns":["et_time","avg_updates_per_minute","pct_of_opening_bucket"],"rows":[{"et_time":"04:00","avg_updates_per_minute":24,"pct_of_opening_bucket":0.6},{"et_time":"04:30","avg_updates_per_minute":10,"pct_of_opening_bucket":0.3},{"et_time":"05:00","avg_updates_per_minute":12,"pct_of_opening_bucket":0.3},{"et_time":"05:30","avg_updates_per_minute":13,"pct_of_opening_bucket":0.3},{"et_time":"06:00","avg_updates_per_minute":10,"pct_of_opening_bucket":0.3},{"et_time":"06:30","avg_updates_per_minute":13,"pct_of_opening_bucket":0.3},{"et_time":"07:00","avg_updates_per_minute":20,"pct_of_opening_bucket":0.5},{"et_time":"07:30","avg_updates_per_minute":23,"pct_of_opening_bucket":0.6},{"et_time":"08:00","avg_updates_per_minute":22,"pct_of_opening_bucket":0.6},{"et_time":"08:30","avg_updates_per_minute":28,"pct_of_opening_bucket":0.7},{"et_time":"09:00","avg_updates_per_minute":52,"pct_of_opening_bucket":1.3},{"et_time":"09:30","avg_updates_per_minute":3901,"pct_of_opening_bucket":100},{"et_time":"10:00","avg_updates_per_minute":3110,"pct_of_opening_bucket":79.7},{"et_time":"10:30","avg_updates_per_minute":2436,"pct_of_opening_bucket":62.4},{"et_time":"11:00","avg_updates_per_minute":2283,"pct_of_opening_bucket":58.5},{"et_time":"11:30","avg_updates_per_minute":1950,"pct_of_opening_bucket":50},{"et_time":"12:00","avg_updates_per_minute":1504,"pct_of_opening_bucket":38.6},{"et_time":"12:30","avg_updates_per_minute":1274,"pct_of_opening_bucket":32.7},{"et_time":"13:00","avg_updates_per_minute":1150,"pct_of_opening_bucket":29.5},{"et_time":"13:30","avg_updates_per_minute":1235,"pct_of_opening_bucket":31.7},{"et_time":"14:00","avg_updates_per_minute":1261,"pct_of_opening_bucket":32.3},{"et_time":"14:30","avg_updates_per_minute":1440,"pct_of_opening_bucket":36.9},{"et_time":"15:00","avg_updates_per_minute":1412,"pct_of_opening_bucket":36.2},{"et_time":"15:30","avg_updates_per_minute":3330,"pct_of_opening_bucket":85.4},{"et_time":"16:00","avg_updates_per_minute":18,"pct_of_opening_bucket":0.5},{"et_time":"16:30","avg_updates_per_minute":11,"pct_of_opening_bucket":0.3},{"et_time":"17:00","avg_updates_per_minute":5,"pct_of_opening_bucket":0.1},{"et_time":"17:30","avg_updates_per_minute":5,"pct_of_opening_bucket":0.1},{"et_time":"18:00","avg_updates_per_minute":8,"pct_of_opening_bucket":0.2},{"et_time":"18:30","avg_updates_per_minute":5,"pct_of_opening_bucket":0.1},{"et_time":"19:00","avg_updates_per_minute":6,"pct_of_opening_bucket":0.2},{"et_time":"19:30","avg_updates_per_minute":10,"pct_of_opening_bucket":0.3}],"shape":"series","sql":"SELECT et_time,\n       avg_updates_per_minute,\n       round(100 * avg_updates_per_minute / maxIf(avg_updates_per_minute, et_time = '09:30') OVER (), 1) AS pct_of_opening_bucket\nFROM (\n    SELECT formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,\n           round(count() / (uniqExact(toDate(toTimeZone(sip_timestamp, 'America/New_York'))) * 30)) AS avg_updates_per_minute\n    FROM global_markets.cache_stocks_quotes\n    WHERE ticker = 'AAPL'\n      AND sip_timestamp >= toDateTime(today() - 10)\n      AND sip_timestamp < toDateTime(today() - 3)\n      AND toDate(toTimeZone(sip_timestamp, 'America/New_York')) IN (\n      SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date\n      FROM global_markets.delayed_stocks_minute_aggs\n      WHERE ticker = 'SPY'\n        AND window_start >= toDateTime(today() - 10)\n        AND window_start < toDateTime(today() - 3)\n      GROUP BY session_date\n      HAVING countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) = 390\n  )\n    GROUP BY et_time\n    HAVING et_time >= '04:00' AND et_time < '20:00'\n)\nORDER BY et_time","computed_at":"2026-08-22T04:35:00.573131+00:00","elapsed":0.682959784}