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 MKC70F0015Accident · No injuriesClosedCallair A-9 · Jefferson, IANTSB FTW70F0063Accident · Minor injuriesClosedGrumman G-164 · Kaplan, LANTSB OAK70D0018Accident · Minor injuriesClosedGiant Bee · Honolulu, HINTSB DIA70D0016Accident · No injuriesClosedCessna 182 · Stevensville, MDNTSB DIA69A0069Accident · No injuriesClosedCessna 195B · Mayodan, NCNTSB CAN69AF533Accident · No injuriesClosedMooney M20G · Labariere, CanadaNTSB NYC70D0111Accident · No injuriesClosedCessna 195 · Geneseo, NYNTSB MKC70D0044Accident · No injuriesClosedCessna 150 · Woodbine, IANTSB SEA69D0269Accident · No injuriesClosedPiper PA-18A · Grasmere, IDNTSB DEN70F0008Accident · Serious injuriesClosedBell 47G3B1 · Broomfield, CONTSB ANC69A0062Accident · No injuriesClosedCessna 180 · Sheldons Pt, AKNTSB ANC70D0013Accident · Minor injuriesClosedAeronca 15AC · Talkeetna, AKNTSB MKC70F0034Accident · No injuriesClosedCessna 170A · Fargo, NDNTSB CHI70D0032Accident · No injuriesClosedCessna 150 · Minooka, ILNTSB NYC70F0010Accident · Serious injuriesClosedCessna 180 · New Salem, MANTSB CHI70D0014Accident · No injuriesClosedLuscombe 8A · Flushing, MINTSB FTW70F0021Accident · Minor injuriesClosedCessna 210B · Ardmore, OKNTSB OAK70D0005Accident · No injuriesClosedPiper PA-25 · Corcoran, CANTSB CHI70D0141Accident · No injuriesClosedPiper J-3 · Mentone, INNTSB CHI70D0140Accident · Minor injuriesClosedPiper PA-28 · Woodville, OHNTSB CHI70D0020Accident · No injuriesClosedWaco UPF-7 · Columbus, OHNTSB SEA69D0262Accident · No injuriesClosedCallair A-9 · Rexburg, IDNTSB MKC70F0152Accident · No injuriesClosedAeronca 7EC · Breckenridge, MNNTSB DEN70D0026Accident · No injuriesClosedChampion 7KCAB · Cody, WYNTSB MKC69F0461Accident · No injuriesClosedPiper PA-28 · Wahoo, NENTSB MIA70D0119Accident · No injuriesClosedBoeing A75 · West Columbia, SCNTSB SEA70D0009Accident · No injuriesClosedChampion 7EC · Eagle Point, ORNTSB MIA70D0002Accident · No injuriesClosedCessna 150 · Bruce, MSNTSB NYC69F0470Accident · Minor injuriesClosedAero Comdr 100 · Fall River, MANTSB DEN69D0248Accident · No injuriesClosedPiper PA-22 · Las Palomas, NMNTSB MIA70D0062Accident · No injuriesClosedCessna 150 · Ft.Pierce, FLNTSB MIA70F0032Accident · Minor injuriesClosedCessna 172E · Bartow, FLNTSB DIA70D0001Accident · No injuriesClosedLuscombe 8C · Seneca, VANTSB CHI70D0044Accident · No injuriesClosedCessna 172H · Hobart, INNTSB MIA70F0025Accident · Minor injuriesClosedBeech 35 · Lobelville, TNNTSB FTW69F0532Accident · No injuriesClosedErcoupe 415-C · East Tawakoni, TXNTSB CHI69F0626Accident · No injuriesClosedCessna 150 · Pontiac, MINTSB DIA69D0206Accident · No injuriesClosedLuscombe 8E · Rutherfordton, NCNTSB CHI70F0057Accident · No injuriesClosedPiper PA-22 · White Pigeon, MINTSB MKC69F0454Accident · Serious injuriesClosedSchleicher KA7 · Scottsbluff, NENTSB MKC69D0463Accident · No injuriesClosedCessna 172 · Elmwood, NENTSB FTW70D0073Accident · No injuriesClosedCessna 182 · Lufkin, TXNTSB DEN70D0037Accident · No injuriesClosedCessna 180 · Grand Junctn, CONTSB CHI69D0648Accident · No injuriesClosedLake LA-4 · Detroit, MINTSB CHI69D0674Accident · No injuriesClosedCessna 150 · Ringwood, ILNTSB MKC69D0442Accident · Minor injuriesClosedPiper PA-22 · Nebraska Cty, NENTSB CHI69F0655Accident · No injuriesClosedPiper PA-22 · Pontiac, MINTSB FTW69D0539Accident · No injuriesClosedPiper PA-18A · Sonora, TXNTSB SEA70D0010Accident · No injuriesClosedCessna 180H · Days Creek, ORNTSB OAK69D0317Accident · No injuriesClosedCessna 150F · S.J.Bautista, CA