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 IAD78DIJ16Accident · No injuriesClosedPiper PA-28 · New Martinsvl, WVNTSB CHI78FET24Accident · No injuriesClosedEaa Biplane GB-1 · Wanatah, INNTSB CHI78FEC37Accident · No injuriesClosedCessna 195 · Ypsilati, MINTSB OAK78DXQ29Accident · No injuriesClosedPiper PA-28 · Austin, NVNTSB FTW78FPD24Accident · No injuriesClosedPiper PA-28 · Smithfield, TXNTSB NYC78FA067Accident · 5 fatalClosedCessna 402 · Pottstown, PANTSB FTW78DRG54Accident · Minor injuriesClosedSchweizer 2-33A · Spilewood, TXNTSB FTW78FPD22Accident · No injuriesClosedGrum Amer AA-1C · Fort Worth, TXNTSB FTW78FRD38Accident · No injuriesClosedCessna 172 · Kaplan, LANTSB SEA78DYE26Accident · Minor injuriesClosedHiller Acft UH12EJ · Forks, WANTSB MKC78DER54Accident · No injuriesClosedPiper PA-28 · Belle Plaine, MNNTSB MIA78DKJ50Accident · Minor injuriesClosedCessna 172 · Huntsville, ALNTSB NYC78FNE22Accident · Minor injuriesClosedPiper PA-28 · Barrington, MANTSB MKC78FTK22Accident · No injuriesClosedGrum Amer AA5 · Brookings, SDNTSB FTW78FPM15Accident · No injuriesClosedSchleicher K7 · Haskell, OKNTSB OAK78FVG47Accident · Minor injuriesClosedCessna 150 · Angels Camp, CANTSB MIA78DLD52Accident · No injuriesClosedCessna 172 · Brandon, FLNTSB CHI78FEK21Accident · No injuriesClosedCessna 150M · London, OHNTSB FTW78DRD33Accident · No injuriesClosedGrumman G-164A · Basile, LANTSB SEA78DYP33Accident · No injuriesClosedBell 47G-2 · Benton City, WANTSB MIA78FLD50Accident · Serious injuriesClosedBeech V35B · Lake Wales, FLNTSB FTW78FQG32Accident · No injuriesClosedBeech C23 · Amarillo, TXNTSB ANC78DAG63Accident · No injuriesClosedPiper PA-18A · Eureka Lodge, AKNTSB ANC78DAG76Accident · No injuriesClosedPiper PA-12 · Soldatna, AKNTSB SEA78FYK17Accident · No injuriesClosedSnow 600S2D · Malin, ORNTSB NYC78DNC29Accident · No injuriesClosedChampion 7ECA · Piscataquis, MENTSB LAX78DUJ80Accident · No injuriesClosedPiper PA-28R · Dolan Springs, AZNTSB MIA78DLG12Accident · No injuriesClosedCessna 188A · Ehrhardt, SCNTSB CHI78DEC33Accident · No injuriesClosedBensen Gyro B8-M · New Hudson, MINTSB SEA78DYP30Accident · No injuriesClosedCessna 180 · Kahlotus, WANTSB FTW78FA049Accident · 2 fatalClosedPiper PA-18 · Greenfield, OKNTSB UNK78X0124Accident · 2 fatalClosedBellanca 14-19 · L Mrcds, NiueNTSB IAD78DLJ13Accident · No injuriesClosedCessna 188T · Fairfield, NCNTSB DEN78DTE57Accident · No injuriesClosedCessna 172I · Ft Morgan, CONTSB MIA78FKJ40Accident · No injuriesClosedCessna 172 · Chipley, ALNTSB FTW78DRG48Accident · Minor injuriesClosedCessna U206F · Mission, TXNTSB FTW78DPG36Accident · No injuriesClosedGrumman G-164A · Arkansas City, ARNTSB MIA78FA090Accident · Minor injuriesClosedConvair 880 · Miami, FLNTSB SEA78FTI18Accident · No injuriesClosedMaule M5235C · Havre, MTNTSB FTW78DPJ23Accident · No injuriesClosedGreat Lakes 2T-1A · Enid, OKNTSB NYC78FFJ21Accident · No injuriesClosedBeech 3NM · Syracuse, NYNTSB CHI78FEE38Accident · No injuriesClosedBeech G-18 · Dekalb, ILNTSB OAK78DXQ24Accident · Minor injuriesClosedCherokee II · Minden, NVNTSB OAK78DVA45Accident · No injuriesClosedCessna 188B · Dos Palos, CANTSB CHI78FEC32Accident · No injuriesClosedSmyth Swdr · Flint, MINTSB CHI78DEP35Accident · Minor injuriesClosedMustang II · Lancaster, WINTSB CHI78DEP34Accident · Minor injuriesClosedHughes 269 · B1rchwood, WINTSB NYC78FNA23Accident · No injuriesClosedMooney M20C · Westerly, RINTSB FTW78FPM09Accident · No injuriesClosedPiper PA-28 · Tulsa, OKNTSB IAD78FA066Accident · Minor injuriesClosedPiper PA-31 · Martinsville, VA