NTSB investigations
14,038 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 OAK79FA005Accident · Minor injuriesClosedLear Jet 24D · Las Vegas, NVNTSB FTW79DRD04Accident · No injuriesClosedCessna 185F · Lafitte, LANTSB FTW78DA006Accident · No injuriesClosedBell 206B · Morgan City, LANTSB SEA79DTA02Accident · No injuriesClosedPiper PA-18 · Miles City, MTNTSB ANC79DA009Accident · No injuriesClosedCessna 207A · Atkasuk, AKNTSB FTW79FPD04Accident · No injuriesClosedCessna 172F · Pilot Point, TXNTSB MIA79DKT05Accident · Serious injuriesClosedStinson 108-1 · Delray Beach, FLNTSB LAX79DUQ13Accident · No injuriesClosedCessna 152 · Oxnard, CANTSB CHI79FEV02Accident · No injuriesClosedCessna 152 · Jacksonville, ILNTSB LAX79FA004Accident · 1 fatalClosedLear Jet 24 · Lancaster, CANTSB MIA79DKJ04Accident · No injuriesClosedPiper PA-38T · Birmingham, ALNTSB OAK79DJA02Accident · No injuriesClosedMurrayair MA-1B · Maui, HINTSB SEA79DYA02Accident · Minor injuriesClosedCessna 172B · St.Anthony, IDNTSB FTW79FQG02Accident · Minor injuriesClosedBeech C18S · Amarillo, TXNTSB IAD79DKM02Accident · No injuriesClosedPiper PA-28 · Liberty, NCNTSB ANC79DAD02Accident · No injuriesClosedLake LA-4 · Harding Lake, AKNTSB LAX79DVA01Accident · No injuriesClosedBoeing A75N · Bakersfield, CANTSB NYC79FNA01Accident · No injuriesClosedPiper PA-28 · Marlboro, MANTSB CHI79FEI01Accident · No injuriesClosedPiper PA-32R · Strongsville, OHNTSB ANC79DAG18Accident · No injuriesClosedBellanca 7GCBC · Naknek Lake, AKNTSB CHI79FEE01Accident · No injuriesClosedPiper PA-28 · Elgin, ILNTSB OAK78DVD57Accident · Serious injuriesClosedCessna 172 · Willits, CANTSB LAX78FUA32Accident · No injuriesClosedBeech D18S · Long Beach, CANTSB DEN78FQA62Accident · No injuriesClosedHelio H-395 · Albuquerque, NMNTSB ANC79FAG02Accident · No injuriesClosedCessna 172 · Ft.Richardson, AKNTSB ANC79DAG07Accident · Serious injuriesClosedCessna 185 · Pt Possession, AKNTSB MKC78DCA52Accident · No injuriesClosedPiper PA-28R · Memphis, MONTSB NYC78FNA48Accident · No injuriesClosedCessna 152 · Bedford, MANTSB NYC78FHA39Accident · 1 fatalClosedBlanik L-3 · Pittstown, NJNTSB MKC78DER94Accident · Minor injuriesClosedGrumman AA-5 · Milaca, MNNTSB IAD78PIJ20Accident · No injuriesClosedPiper PA-32R · Wise, VANTSB MKC78FCG70Accident · Minor injuriesClosedCessna 172 · Higginsville, MONTSB MIA78DLD78Accident · Serious injuriesClosedCessna 172 · Sanibel Is, FLNTSB LAX78IA078Incident · No injuriesClosedCessna 402B · Phoenix, AZNTSB DEN78FQA59Accident · No injuriesClosedCessna 152 · Albuquerque, NMNTSB MKC78FER93Accident · No injuriesClosedGrumman AA-5A · St Paul, MNNTSB LAX78DVM47Accident · No injuriesClosedBellanca 7ECA · Paso Robles, CANTSB CHI78FEI38Accident · No injuriesClosedCessna 170A · Strongsville, OHNTSB LAX78FUA31Accident · No injuriesClosedCessna 152 · Torrance, CANTSB SEA78FYM51Accident · Minor injuriesClosedCessna 182 · Oregon City, ORNTSB SEA78FYE36Accident · No injuriesClosedStinson 108-3 · Neah Bay, WANTSB IAD79FA109Accident · Serious injuriesClosedTed Smith 600 · Morrisville, NCNTSB OAK78FVM46Accident · No injuriesClosedBell 47D1 · Castroville, CANTSB OAK78DXQ50Accident · Minor injuriesClosedCessna 206 · Mina, NVNTSB OAK78FVA85Accident · No injuriesClosedBell H13H · Firebaugh, CANTSB FTW79FRG73Accident · No injuriesClosedCessna A188B · Donna, TXNTSB ANC78DAD08Accident · Minor injuriesClosedAero Comdr 560 · Italio Riv, AKNTSB MKC78DTK39Accident · No injuriesClosedRockwell IN 112 · Parkston, SDNTSB OAK78FA052Accident · 3 fatalClosedBellanca 17-31A · San Jose, CANTSB CHI78FA067Accident · No injuriesClosedBeech 18T · Chicago, IL