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 MKC74FER57Accident · 1 fatalClosedSisler-Home SF2 · Faribault, MNNTSB LAX74FUJ69Accident · Minor injuriesClosedAmer Avco AA1-B · Rimrock, AZNTSB IAD74AI068Accident · 4 fatalClosedBeech B35 · Williamston, NCNTSB ANC74DAH21Accident · No injuriesClosedPiper PA-18A · Homer, AKNTSB MKC74DCA30Accident · No injuriesClosedPiper PA-28 · Kahoka, MONTSB SEA74DTI24Accident · No injuriesClosedLuscombe 8A · Wise River, MTNTSB FTW74FPM27Accident · No injuriesClosedCessna 188B · Dustin, OKNTSB IAD74FIG29Accident · Minor injuriesClosedPiper PA-28 · Whitemarsh, MDNTSB FTW74DRA44Accident · No injuriesClosedCallair A-9 · Rosharon, TXNTSB DEN74FTC37Accident · Serious injuriesClosedErco 415-C · Casper, WYNTSB MIA74DKG83Accident · No injuriesClosedCessna 140 · Brunswick, GANTSB OAK74FVG66Accident · Serious injuriesClosedPiper PA-24 · Davis, CANTSB NYC74DHA32Accident · No injuriesClosedCessna 150 · Pattenburg, NJNTSB MIA74DLD97Accident · Minor injuriesClosedTeenie TWO · Venice, FLNTSB OAK74DVA71Accident · No injuriesClosedPiper PA-24 · Fresno, CANTSB FTW74DPA28Accident · No injuriesClosedSailplane HP14 · Caddo Mills, TXNTSB NYC74DNC46Accident · No injuriesClosedChampion 7ECA · N.Canada Plant, MENTSB SEA74DYE46Accident · No injuriesClosedCessna 180H · Granite Fall, WANTSB MKC74DER54Accident · No injuriesClosedBellanca 17-31 · New Germany, MNNTSB NYC74AN101Accident · 2 fatalClosedGlobe GC-1B · Advance, NCNTSB CHI74FET21Accident · Minor injuriesClosedGrumman G-164 · Sodus, MINTSB CHI74FEP48Accident · No injuriesClosedPiper PA-32 · Friendship, WINTSB CHI74FEC48Accident · Minor injuriesClosedPiper PA-28 · Belleville, MINTSB MIA74DLD92Accident · Minor injuriesClosedCessna 172 · Lake Wales, FLNTSB DEN74FTM20Accident · Serious injuriesClosedPiper PA-31 · Halls Crossing, UTNTSB CHI74FEA43Accident · 1 fatalClosedPhillips PA1067 · Sheridan, INNTSB CHI74FEA42Accident · No injuriesClosedBeech A23-A · Pendleton, INNTSB SEA740YC57Accident · No injuriesClosedCessna 182H · Tsacha Lk, CanadaNTSB MKC74DER51Accident · No injuriesClosedCessna 150J · Esko, MNNTSB MIA74FKQ22Accident · No injuriesClosedCessna 172B · Indianola, MSNTSB FTW74FRG92Accident · No injuriesClosedGrumman G-164 · Port Lavaca, TXNTSB FTW74AF088Accident · 1 fatalClosedCessna 150G · San Antonio, TXNTSB DEN74AD056Accident · Serious injuriesClosedCessna 402B · Logan, UTNTSB OAK74AP064Accident · Serious injuriesClosedBeech A24R · Lincoln, CANTSB MKC74FCA28Accident · Serious injuriesClosedPiper PA-25 · Sikeston, MONTSB IAD74DLJ45Accident · Minor injuriesClosedPiper PA-28 · White Lake, NCNTSB CHI74AC095Accident · 1 fatalClosedPiper PA-23 · Lafayette, INNTSB FTW74FRD41Accident · No injuriesClosedGrumman G-164A · Gueydan, LANTSB CHI74FEM62Accident · No injuriesClosedEL Tomcat I · Belding, MINTSB OAK74DYE45Accident · Minor injuriesClosedKasper 100 · Arlington, WANTSB MKC74FCD36Accident · Minor injuriesClosedCessna 140 · Logan, IANTSB MIA74DLA45Accident · No injuriesClosedCessna 188 · Trenton, FLNTSB SEA74AS045Accident · 1 fatalClosedGlobe GC-1B · Metaline Fls, WANTSB OAK74AP063Accident · 1 fatalClosedPiper PA-22 · Los Banos, CANTSB NYC74FNE26Accident · No injuriesClosedPiper PA-22 · Plymouth, CTNTSB LAX74FUQ38Accident · Serious injuriesClosedCessna 172 · Snta Brbara, CANTSB FTW74DQG60Accident · Serious injuriesClosedNavion A · Briscoe, TXNTSB CHI74FEV53Accident · Serious injuriesClosedMooney M20C · Watseka, ILNTSB OAK74FVD35Accident · No injuriesClosedGlobe GC-1B · Novato, CANTSB NYC74FGM33Accident · No injuriesClosedCessna 150K · Ohiopyle, PA