NTSB investigations
14,041 cases where the phase of flight was Takeoff.
Cases, newest first
Query with SQL
duckdb -csv -c "WITH phase_names(main, name) AS (VALUES (100, 'Prior to flight'), (150, 'Standing'), (200, 'Pushback/towing'), (250, 'Taxi'), (300, 'Takeoff'), (350, 'Initial climb'), (400, 'Enroute'), (450, 'Maneuvering'), (500, 'Approach'), (550, 'Landing'), (600, 'Emergency descent'), (650, 'Uncontrolled descent'), (700, 'Post-impact'), (750, 'After landing'), (800, 'Other'), (990, 'Unknown')),
crosswalk(code, main, name) AS (VALUES (500, 150, 'Standing'), (501, 150, 'Standing - pre-flight'), (502, 150, 'Standing - starting engine(s)'), (503, 150, 'Standing - engine(s) operating'), (504, 150, 'Standing - engine(s) not operating'), (505, 150, 'Standing - idling rotors'), (510, 250, 'Taxi'), (511, 200, 'Taxi - pushback/tow'), (512, 250, 'Taxi - to takeoff'), (513, 250, 'Taxi - from landing'), (514, 250, 'Taxi - aerial'), (520, 300, 'Takeoff'), (521, 300, 'Takeoff - roll/run'), (522, 350, 'Takeoff - initial climb'), (523, 300, 'Takeoff - aborted'), (530, 400, 'Climb'), (531, 400, 'Climb - to cruise'), (540, 400, 'Cruise'), (541, 400, 'Cruise - normal'), (542, 400, 'Maneuvering - holding (IFR)'), (550, 400, 'Descent'), (551, 400, 'Descent - normal'), (552, 600, 'Descent - emergency'), (553, 650, 'Descent - uncontrolled'), (560, 500, 'Approach'), (561, 500, 'Approach - VFR pattern - downwind'), (562, 500, 'Approach - VFR pattern - base turn'), (563, 500, 'Approach - VFR pattern - base leg/base to final'), (564, 500, 'Approach - VFR pattern - final approach'), (565, 500, 'Go-around (VFR)'), (566, 500, 'Approach - IAF to FAF/outer marker (IFR)'), (567, 500, 'Approach - FAF/outer marker to threshold (IFR)'), (568, 500, 'Circling (IFR)'), (569, 500, 'Missed approach (IFR)'), (570, 550, 'Landing'), (571, 550, 'Landing - flare/touchdown'), (572, 550, 'Landing - roll'), (573, 550, 'Landing - aborted'), (574, 550, 'Emergency landing'), (575, 550, 'Emergency landing after takeoff'), (576, 600, 'Emergency descent/landing'), (580, 450, 'Maneuvering'), (581, 450, 'Maneuvering - aerial application'), (582, 450, 'Maneuvering - turn to reverse direction'), (583, 450, 'Maneuvering - turn to landing area (emergency)'), (590, 450, 'Hover'), (591, 450, 'Hover - in ground effect'), (592, 450, 'Hover - out of ground effect'), (600, 800, 'Other'), (610, 990, 'Unknown')),
current_codes AS (
SELECT e.case_mkey, TRY_CAST(e.\"tier1Number\" AS INTEGER) AS code,
row_number() OVER (PARTITION BY e.case_mkey ORDER BY coalesce(e.\"isDefiningEvent\", false) DESC, e.position) AS n
FROM 'https://openairdocs.org/data/latest/ntsb_events.parquet' e
WHERE e.aircrafts_position = 1 AND e.\"tier1Number\" GLOB '[1-9][0-9]*'
AND (e.\"isDefiningEvent\" OR e.case_mkey IN (SELECT \"mKey\" FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' WHERE \"isPre1982\"))
),
phases AS (
SELECT case_mkey, 'current' AS scheme, code, CASE WHEN code >= 990 THEN 990 ELSE code // 50 * 50 END AS main
FROM current_codes WHERE n = 1
UNION ALL
SELECT o.case_mkey, 'older', o.\"phaseOfFlightCode\", w.main
FROM 'https://openairdocs.org/data/latest/ntsb_occurrences.parquet' o JOIN crosswalk w ON w.code = o.\"phaseOfFlightCode\"
WHERE o.aircrafts_position = 1 AND o.\"occurrenceNumber\" = 1 AND o.case_mkey NOT IN (SELECT case_mkey FROM current_codes)
),
case_phases AS (
SELECT p.*, c.\"eventDate\", c.\"highestInjuryLevel\" = 'Fatal' AS fatal, a.aircraft_model_code
FROM phases p JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c.\"mKey\" = p.case_mkey
LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = p.case_mkey AND a.position = 1
WHERE c.\"eventDate\" >= DATE '1962-01-01' AND p.main IN (SELECT main FROM phase_names)
)
SELECT c.\"ntsbNumber\", c.\"eventDate\", c.\"eventType\", c.\"eventCity\", c.\"eventStateOrRegion\", a.n_number, a.\"aircraftMake\", a.\"aircraftModel\", c.\"highestInjuryLevel\", c.\"totalFatal\", c.\"completionStatus\", c.report_url
FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = c.\"mKey\" AND a.position = 1
WHERE c.\"mKey\" IN (SELECT case_mkey FROM case_phases WHERE main = 300)
ORDER BY c.\"eventDate\" DESC, c.\"ntsbNumber\" DESC"Prints the whole list as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.
WITH phase_names(main, name) AS (VALUES (100, 'Prior to flight'), (150, 'Standing'), (200, 'Pushback/towing'), (250, 'Taxi'), (300, 'Takeoff'), (350, 'Initial climb'), (400, 'Enroute'), (450, 'Maneuvering'), (500, 'Approach'), (550, 'Landing'), (600, 'Emergency descent'), (650, 'Uncontrolled descent'), (700, 'Post-impact'), (750, 'After landing'), (800, 'Other'), (990, 'Unknown')),
crosswalk(code, main, name) AS (VALUES (500, 150, 'Standing'), (501, 150, 'Standing - pre-flight'), (502, 150, 'Standing - starting engine(s)'), (503, 150, 'Standing - engine(s) operating'), (504, 150, 'Standing - engine(s) not operating'), (505, 150, 'Standing - idling rotors'), (510, 250, 'Taxi'), (511, 200, 'Taxi - pushback/tow'), (512, 250, 'Taxi - to takeoff'), (513, 250, 'Taxi - from landing'), (514, 250, 'Taxi - aerial'), (520, 300, 'Takeoff'), (521, 300, 'Takeoff - roll/run'), (522, 350, 'Takeoff - initial climb'), (523, 300, 'Takeoff - aborted'), (530, 400, 'Climb'), (531, 400, 'Climb - to cruise'), (540, 400, 'Cruise'), (541, 400, 'Cruise - normal'), (542, 400, 'Maneuvering - holding (IFR)'), (550, 400, 'Descent'), (551, 400, 'Descent - normal'), (552, 600, 'Descent - emergency'), (553, 650, 'Descent - uncontrolled'), (560, 500, 'Approach'), (561, 500, 'Approach - VFR pattern - downwind'), (562, 500, 'Approach - VFR pattern - base turn'), (563, 500, 'Approach - VFR pattern - base leg/base to final'), (564, 500, 'Approach - VFR pattern - final approach'), (565, 500, 'Go-around (VFR)'), (566, 500, 'Approach - IAF to FAF/outer marker (IFR)'), (567, 500, 'Approach - FAF/outer marker to threshold (IFR)'), (568, 500, 'Circling (IFR)'), (569, 500, 'Missed approach (IFR)'), (570, 550, 'Landing'), (571, 550, 'Landing - flare/touchdown'), (572, 550, 'Landing - roll'), (573, 550, 'Landing - aborted'), (574, 550, 'Emergency landing'), (575, 550, 'Emergency landing after takeoff'), (576, 600, 'Emergency descent/landing'), (580, 450, 'Maneuvering'), (581, 450, 'Maneuvering - aerial application'), (582, 450, 'Maneuvering - turn to reverse direction'), (583, 450, 'Maneuvering - turn to landing area (emergency)'), (590, 450, 'Hover'), (591, 450, 'Hover - in ground effect'), (592, 450, 'Hover - out of ground effect'), (600, 800, 'Other'), (610, 990, 'Unknown')),
current_codes AS (
SELECT e.case_mkey, TRY_CAST(e."tier1Number" AS INTEGER) AS code,
row_number() OVER (PARTITION BY e.case_mkey ORDER BY coalesce(e."isDefiningEvent", false) DESC, e.position) AS n
FROM 'https://openairdocs.org/data/latest/ntsb_events.parquet' e
WHERE e.aircrafts_position = 1 AND e."tier1Number" GLOB '[1-9][0-9]*'
AND (e."isDefiningEvent" OR e.case_mkey IN (SELECT "mKey" FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' WHERE "isPre1982"))
),
phases AS (
SELECT case_mkey, 'current' AS scheme, code, CASE WHEN code >= 990 THEN 990 ELSE code // 50 * 50 END AS main
FROM current_codes WHERE n = 1
UNION ALL
SELECT o.case_mkey, 'older', o."phaseOfFlightCode", w.main
FROM 'https://openairdocs.org/data/latest/ntsb_occurrences.parquet' o JOIN crosswalk w ON w.code = o."phaseOfFlightCode"
WHERE o.aircrafts_position = 1 AND o."occurrenceNumber" = 1 AND o.case_mkey NOT IN (SELECT case_mkey FROM current_codes)
),
case_phases AS (
SELECT p.*, c."eventDate", c."highestInjuryLevel" = 'Fatal' AS fatal, a.aircraft_model_code
FROM phases p JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c."mKey" = p.case_mkey
LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = p.case_mkey AND a.position = 1
WHERE c."eventDate" >= DATE '1962-01-01' AND p.main IN (SELECT main FROM phase_names)
)
SELECT c."ntsbNumber", c."eventDate", c."eventType", c."eventCity", c."eventStateOrRegion", a.n_number, a."aircraftMake", a."aircraftModel", c."highestInjuryLevel", c."totalFatal", c."completionStatus", c.report_url
FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = c."mKey" AND a.position = 1
WHERE c."mKey" IN (SELECT case_mkey FROM case_phases WHERE main = 300)
ORDER BY c."eventDate" DESC, c."ntsbNumber" DESCRun it at the DuckDB prompt, or in any tool that reads Parquet over HTTPS. More ways to query the release are on Use the data.
NTSB OAK75FVD31Accident · 1 fatalClosedGrumman F7F · Fortuna, CANTSB OAK75DVA22Accident · Minor injuriesClosedCessna 188 · Five Points, CANTSB OAK75DVA25Accident · No injuriesClosedCessna 188 · Lemoore, CANTSB MIA75DLD21Accident · No injuriesClosedBell 47G-5 · Plant City, FLNTSB ANC75DAG40Accident · No injuriesClosedPiper PA-12 · Iliamna, AKNTSB ANC75DAG39Accident · No injuriesClosedStinson 108-3 · Skwentna, AKNTSB OAK75DVD12Accident · No injuriesClosedCessna 150 · Fremont, CANTSB OAK75DVA19Accident · No injuriesClosedBeech B19 · Columbia, CANTSB CHI75FET07Accident · No injuriesClosedAeronca 7EC · Demotte, INNTSB MIA75DKJ25Accident · Minor injuriesClosedAeronca 7AC · Luverne, ALNTSB MKC75DER23Accident · No injuriesClosedPiper PA-24 · Fairmont, MNNTSB MKC75FCQ15Accident · No injuriesClosedBeech 58 · Wichita, KSNTSB CHI75FEI16Accident · Minor injuriesClosedStinson 108-3 · N Jackson, OHNTSB MIA75DKJ20Accident · Serious injuriesClosedCessna 188 · Mobile, ALNTSB ANC75AA025Accident · No injuriesClosedDehavilland DHC-6 · Kipnuk, AKNTSB ANC75AA024Accident · No injuriesClosedCessna 185 · Bethel, AKNTSB CHI75FEI15Accident · No injuriesClosedCessna 172M · N Jackson, OHNTSB NYC75FFA10Accident · No injuriesClosedCessna 177 · Westville, NYNTSB NYC75IN035Incident · No injuriesClosedBeech 99 · Flushing, NYNTSB NYC75FNE10Accident · No injuriesClosedLake LA-4 · East Haddam, CTNTSB MKC75FCG13Accident · No injuriesClosedCessna 150 · Kansas City, KSNTSB LAX75FUJ32Accident · No injuriesClosedCessna 188A · Poston, AZNTSB CHI75FEE20Accident · No injuriesClosedBeech 35-A33 · Frankfort, ILNTSB LAX75FUQ07Accident · Serious injuriesClosedBell 47J-2A · Somis, CANTSB FTW75FPD05Accident · No injuriesClosedCessna 500 · Mineral Wells, TXNTSB DEN75FTE21Accident · No injuriesClosedBell 47G3B1 · Grand Valley, CONTSB SEA75FTA08Accident · No injuriesClosedChampion 7GCAA · Carlyle, MTNTSB MKC75FTG12Accident · No injuriesClosedPiper PA-23 · Bowman, NDNTSB ANC75DAG27Accident · No injuriesClosedCessna 185 · Glennallen, AKNTSB MKC75DCQ14Accident · Minor injuriesClosedPiper PA-28 · Iola, KSNTSB FTW75DPJ04Accident · No injuriesClosedPiper PA-28 · Duke, OKNTSB ANC75DAG26Accident · No injuriesClosedPiper PA-12 · Anchorage, AKNTSB SEA75DYA15Accident · Minor injuriesClosedCessna 210C · Mccall, IDNTSB ANC74AA017Accident · No injuriesClosedCessna 180B · Juneau, AKNTSB MIA75DKQ12Accident · No injuriesClosedPiper PA-25 · Beulah, MSNTSB MIA75DLA12Accident · No injuriesClosedCessna 140 · Panama City, FLNTSB OAK75DXQ20Accident · No injuriesClosedBeech C35 · Elko, NVNTSB OAK75DXQ18Accident · No injuriesClosedAmer Avco AA-5 · Elko, NVNTSB OAK75AVG19Accident · No injuriesClosedCessna 177 · Sacramento, CANTSB FTW75FRJ07Accident · Minor injuriesClosedCessna A188B · Lk Providence, LANTSB MIA75FKG18Accident · No injuriesClosedCessna 182C · Hampton, GANTSB FTW75DPG17Accident · No injuriesClosedCessna 310B · West Helena, ARNTSB ANC75AA018Accident · No injuriesClosedCessna 185 · Kongiganak, AKNTSB MKC75FCD09Accident · No injuriesClosedPiper PA-25 · Storm Lake, IANTSB LAX75FUA08Accident · No injuriesClosedStarduster SA100 · Long Beach, CANTSB NYC75FGT06Accident · No injuriesClosedGrumman G-73 · Minersville, PANTSB MIA75DKQ08Accident · No injuriesClosedPiper PA-25 · Doddsville, MSNTSB OAK75FXQ15Accident · No injuriesClosedBeech E35 · Reno, NVNTSB FTW75FQG17Accident · Serious injuriesClosedPiper PA-25 · Silverton, TXNTSB SEA75DYC09Accident · Serious injuriesClosedBell 205A-1 · Cook, WA