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 SEA80DYE04Accident · No injuriesClosedMooney M20C · Everett, WANTSB LAX80FUG04Accident · 1 fatalClosedBellanca 7KCAB · Corona, CANTSB FTW80FRA04Accident · No injuriesClosedGrum Amer AA-5A · Marquez, TXNTSB CHI80FEP03Accident · No injuriesClosedPiper PA-28 · Milwaukee, WINTSB ANC80FA006Accident · No injuriesClosedBeech E18S · Kotzebue, AKNTSB ANC80DAG21Accident · Minor injuriesClosedCessna 172 · Kipnuk, AKNTSB SEA80FYM01Accident · No injuriesClosedPiper PA-38 · Troutdale, ORNTSB DEN80DQD01Accident · Minor injuriesClosedPiper PA-28 · Alamogordo, NMNTSB CHI80FEM04Accident · Serious injuriesClosedPiper PA-12 · Long Rapids, MINTSB CHI80DEE04Accident · Minor injuriesClosedPiper PA-28 · Chicago, ILNTSB SEA80FTA02Accident · No injuriesClosedCessna 210 · Billings, MTNTSB NYC80FNE01Accident · Minor injuriesClosedPiper PA-32S · W.Springfield, MANTSB MIA80FA004Accident · 1 fatalClosedPitts S-2A · Bunnell, FLNTSB FTW80FPD02Accident · Minor injuriesClosedAeronca 7AC · Kennedale, TXNTSB CHI80FEV05Accident · Minor injuriesClosedErco 415-C · Grafton, ILNTSB MIA80FLA03Accident · Serious injuriesClosedCessna 172M · Interlachen, FLNTSB LAX80FVA03Accident · Serious injuriesClosedHiller UH-12E · Mendota, CANTSB MKC80FTK01Accident · Serious injuriesClosedErco 415-C · Sturgis, SDNTSB LAX80DUQ02Accident · No injuriesClosedCessna 150L · Van Nuys, CANTSB DEN80FQA05Accident · Minor injuriesClosedGrum Amer AA-1C · Albuquerque, NMNTSB FTW80DQG02Accident · No injuriesClosedCessna A188B · Stanton, TXNTSB NYC80FNA01Accident · No injuriesClosedCessna 172E · So.Weymouth, MANTSB ANC80DAG06Accident · No injuriesClosedCessna U206 · Iliamna, AKNTSB FTW80DPM01Accident · No injuriesClosedMaule M-5 · Henryetta, OKNTSB DCA80AA002Accident · 8 fatalClosedPiper PA-31 · Covington, KYNTSB ANC80DA002Accident · 4 fatalClosedCessna 207A · Anchorage, AKNTSB MIA80DLA02Accident · Serious injuriesClosedPiper PA-28 · Bunnell, FLNTSB CHI80FEI01Accident · Minor injuriesClosedMooney M20F · Magnolia, OHNTSB DEN80FQA01Accident · No injuriesClosedPiper PA-38 · Gallup, NMNTSB CHI80FEK02Accident · No injuriesClosedGrum-Amer AA1-B · Fredericktown, OHNTSB CHI79FA002Accident · 3 fatalClosedPiper PA-32R · Elgin, ILNTSB IAD80FA001Accident · 1 fatalClosedPiper PA-23 · Mooresville, NCNTSB FTW80DPJ01Accident · No injuriesClosedBrantly B-2B · Guymon, OKNTSB CHI80FEM01Accident · Minor injuriesClosedCessna 172K · Byron Center, MINTSB ANC80DAG07Accident · No injuriesClosedPiper PA-22 · Post Lake, AKNTSB MKC79DCD44Accident · No injuriesClosedPiper PA-25 · Lost Nation, IANTSB IAD79FKW21Accident · Minor injuriesClosedMooney M-20K · Benton, TNNTSB SEA79FYP44Accident · Serious injuriesClosedBellanca 7GCAA · Clearwater, IDNTSB MIA79FA130Accident · 2 fatalClosedCessna 120 · Vicksburg, MSNTSB MIA79FA129Accident · No injuriesClosedBeech D18S · Sumter, SCNTSB MIA79DLA53Accident · No injuriesClosedCessna 120 · Tallahassee, FLNTSB CHI7.FEP81Accident · Minor injuriesClosedCessna 152 · Rio, WINTSB ANC80DAG02Accident · No injuriesClosedPiper PA-18 · Ugashik, AKNTSB IAD79FA089Accident · 1 fatalClosedPiper PA-38 · Chesterfield, VANTSB MIA79FLD99Accident · Serious injuriesClosedVarieze Rutan · Lake Wales, FLNTSB NYC79FA105Accident · 3 fatalClosedBeech 35C33A · Warren, VTNTSB LAX79DA089Accident · No injuriesClosedCessna 185 · Tunnel Meadows, CANTSB FTW79DRD56Accident · No injuriesClosedCessna 188B · Vacherie, LANTSB MIA79FA127Accident · 3 fatalClosedBeech D18S · Miramar, FLNTSB NYC79FA103Accident · 1 fatalClosedBeech E18S · Suffield, CT