The 2010 Flash Crash, Minute by Minute
Crash-window damage by name: low vs the 2:30 pm ET referencetable ·
2026-07-26 · 6×6
SPY on May 6, 2010: the flash crash day, receiptedscalar ·
2026-07-26 · 1×10116.83
SPY at one-minute resolution, 2:00–3:30 pm ET on May 6, 2010table ·
2026-07-26 · 90×4
The steepest single minutes: biggest open-to-low drops, 2:00–3:30 pm ETtable ·
2026-07-26 · 5×5
Five famous crash sessions: depth of the low and the bounce off it (SPY)series ·
2026-07-26 · 5×4
The aftermath: when the May 5 close was reclaimed, and when the panic low broke for realscalar ·
2026-07-26 · 1×7105
The famous casualties on the raw trade tape, 2:30–3:30 pm ETtable ·
2026-07-26 · 4×6
Crash-window damage by name: low vs the 2:30 pm ET reference
Crash-window damage by name: low vs the 2:30 pm ET reference
| ticker | pre_crash_1430 | crash_low | low_vs_1430_pct | low_et | close_vs_1430_pct |
|---|---|---|---|---|---|
| ACN | 41.49 | 17.74 | -57.2 | 14:47 | -0.9 |
| PG | 62.17 | 39.37 | -36.7 | 14:47 | -2.3 |
| MMM | 84.45 | 67.98 | -19.5 | 14:46 | -0.3 |
| SPY | 113.35 | 105 | -7.4 | 14:45 | -0.4 |
| DIA | 106.05 | 99.16 | -6.5 | 14:47 | -0.7 |
| IWM | 66.84 | 63.36 | -5.2 | 14:45 | 0.7 |
the exact SQL behind every number
SELECT
ticker,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 870), 2) AS pre_crash_1430,
round(minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 871 AND 915), 2) AS crash_low,
round((minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 871 AND 915) / argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 870) - 1) * 100, 1) AS low_vs_1430_pct,
formatDateTime(toTimeZone(argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 871 AND 915), 'America/New_York'), '%H:%i') AS low_et,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 870) - 1) * 100, 1) AS close_vs_1430_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('ACN', 'PG', 'MMM', 'IWM', 'DIA', 'SPY')
AND window_start >= toDateTime('2010-05-06 04:00:00') AND window_start < toDateTime('2010-05-06 23:59:00')
GROUP BY ticker
ORDER BY low_vs_1430_pct ASC
More from this analysisThe 2010 Flash Crash, Minute by Minute
SPY at one-minute resolution, 2:00–3:30 pm ET on May 6, 2010
table 90×4
→
The steepest single minutes: biggest open-to-low drops, 2:00–3:30 pm ET
table 5×5
→
The famous casualties on the raw trade tape, 2:30–3:30 pm ET
table 4×6
→
Five famous crash sessions: depth of the low and the bounce off it (SPY)
series 5×4
→
See all 2,170 queries →