NTSB investigations
20,559 cases where the phase of flight was Initial climb.
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 = 350)
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 = 350)
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 SEA78DYM29Accident · No injuriesClosedBeech 35 · Gresham, ORNTSB OAK78FVD35Accident · No injuriesClosedPiper PA-28 · Hayward, CANTSB NYC78FHM16Accident · Minor injuriesClosedPiper PA-28 · Mahopac, NYNTSB NYC78FHA22Accident · No injuriesClosedPiper PA-28 · Pittstown, NJNTSB NYC78FA049Accident · Serious injuriesClosedCessna 150M · West Chester, PANTSB SEA78FYM31Accident · Minor injuriesClosedAeronca 7AC · Estacada, ORNTSB MIA78FKQ10Accident · Serious injuriesClosedPiper PA-34 · Laurel, MSNTSB MIA78DLA32Accident · Serious injuriesClosedLouis Spcl FRL-1 · Quincy, FLNTSB MKC78FCD19Accident · No injuriesClosedPiper PA-32 · Washington, IANTSB MKC78FCQ22Accident · No injuriesClosedCessna 182 · Augusta, KSNTSB LAX78FUJ51Accident · 1 fatalClosedKr-1 · Yuma, AZNTSB ANC78DAG44Accident · Serious injuriesClosedCessna 170 · Wasilla, AKNTSB OAK78FVG27Accident · No injuriesClosedCessna 177 · Vacaville, CANTSB MIA78FLD41Accident · Serious injuriesClosedCessna 172N · Orlando, FLNTSB IAD78FIG07Accident · Minor injuriesClosedCessna 150 · Rising Sun, MDNTSB FTW78FPA22Accident · No injuriesClosedHelio 550A · Dallas, TXNTSB FTW78DRG38Accident · No injuriesClosedPiper PA-25 · Pearsall, TXNTSB FTW78DRG35Accident · No injuriesClosedPiper PA-36 · Mcallen, TXNTSB CHI78FEM16Accident · Serious injuriesClosedCessna 172B · Fruitport, MINTSB CHI78FA037Accident · 1 fatalClosedCessna 182G · Berrien Spring, MINTSB MKC78FER41Accident · Serious injuriesClosedBeech A23-19 · Inver Grv Hts, MNNTSB CHI78FEG08Accident · Serious injuriesClosedPiper PA-28 · Eldorado, OHNTSB ANC78FA034Accident · 1 fatalClosedPiper PA-18 · Homer, AKNTSB ANC78FA033Accident · 2 fatalClosedCrosswinds PA-18 · Birchwood, AKNTSB NYC78FA046Accident · 1 fatalClosedPiper PA-28 · Danbury, CTNTSB NYC78FA045Accident · 1 fatalClosedChampion 7ECA · Shenango Twp, PANTSB OAK78FA030Accident · Serious injuriesClosedCessna 411 · Fresno, CANTSB IAD78FLT05Accident · No injuriesClosedHiller UH12E · Paris, TNNTSB ANC78DAG51Accident · No injuriesClosedDer Enterpr D.K.V. · Rainy Pass, AKNTSB FTW78FRJ16Accident · Serious injuriesClosedW Pusher WAS 2 · Marksville, LANTSB SEA78FYM27Accident · No injuriesClosedAmer Avco AA-1 · Oregon City, ORNTSB MIA78FKG38Accident · Serious injuriesClosedPiper PA-22 · Loganville, GANTSB DEN78FTC21Accident · Minor injuriesClosedPiper PA-22 · Ulm, WYNTSB NYC78FNA20Accident · No injuriesClosedCessna 172 · Stow, MANTSB NYC78FA044Accident · 2 fatalClosedRockwell 114 · Roscoe, NYNTSB MIA78FKG39Accident · Serious injuriesClosedGrum Amer AA1-A · Atlanta, GANTSB MIA78FA070Accident · 3 fatalClosedPiper PA-28 · Atlanta, GANTSB LAX78FUG24Accident · Serious injuriesClosedBantom W3 · Corona, CANTSB CHI78FEE34Accident · Minor injuriesClosedPiper PA-28 · Grayslake, ILNTSB LAX78DUJ48Accident · No injuriesClosedCitabria 7ECA · Palominas, AZNTSB ANC78FA030Accident · 2 fatalClosedDehavilland DHC-2 · Cordova, AKNTSB ANC78FA029Accident · No injuriesClosedPiper PA-34 · Anchorage, AKNTSB MKC78FA032Accident · 1 fatalClosedPiper PA-23 · St Cloud, MNNTSB MKC78DCG27Accident · No injuriesClosedCessna R172E · Ludlow, MONTSB CHI78FET18Accident · No injuriesClosedCessna A188B · Butler, INNTSB LAX78FUM19Accident · Minor injuriesClosedPiper PA-22 · Santee, CANTSB MIA78FLD35Accident · No injuriesClosedCessna 150H · Brooksville, FLNTSB FTW78DRD22Accident · No injuriesClosedPiper PA-18 · Yacloskey, LANTSB MKC78FCD16Accident · No injuriesClosedPiper PA-28 · Bedford, IANTSB MIA78DLD34Accident · No injuriesClosedCessna 172M · Kenansville, FL