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 MIA72FKH11Accident · No injuriesClosedAeronca 7AC · Winder, GANTSB ANC72DAA33Accident · No injuriesClosedPiper PA-18 · Big Delta, AKNTSB LAX73OL011Accident · No injuriesClosedAero Comdr 100 · Villa Ahumada, MexicoNTSB MIA72AM131Accident · 1 fatalClosedCessna 177 · Tampa, FLNTSB DEN72FTE76Accident · Serious injuriesClosedStinson 108-1 · Castle Rock, CONTSB FTW72DQG44Accident · No injuriesClosedRyan Navion · Roby, TXNTSB MKC72DCG60Accident · Serious injuriesClosedGrant GB-1 · Lamonte, MONTSB MKC72DCD73Accident · Minor injuriesClosedStinson 10A · Troy Mills, IANTSB MIA72AM130Accident · 2 fatalClosedAeronca 7AC · Claxton, GANTSB FTW72AF082Accident · 2 fatalClosedCessna 210E · Monticello, ARNTSB NYC72DLJ33Accident · No injuriesClosedBeech A23 · Ocracoke, NCNTSB CHI72FET34Accident · Minor injuriesClosedDowner RC-3 · Ligonier, INNTSB CHI72FEC45Accident · No injuriesClosedCessna 150G · Oxford, MINTSB OAK72DVG66Accident · No injuriesClosedTaylorcraft L-2 · Dunsmuir, CANTSB MIA72FKT79Accident · No injuriesClosedBeech 65-88 · Ft.Lauderdale, FLNTSB DEN72FTE33Accident · No injuriesClosedCessna T337D · Englewood, CONTSB FTW72DPM32Accident · No injuriesClosedBeech 35 · Talihina, OKNTSB SEA72FTI22Accident · No injuriesClosedBellanca 7GCBC · Hogeland, MTNTSB NYC72IN146Incident · 1 fatalClosedDelta Kite · Washington, DCNTSB NYC72FNC43Accident · No injuriesClosedPiper PA-22 · Warren, VTNTSB LAX72AL059Accident · 2 fatalClosedMooney M20F · Warner Spgs, CANTSB NYC72FID31Accident · Minor injuriesClosedAeronca 7AC · Ashland, VANTSB CHI72FEC43Accident · No injuriesClosedBeech J35 · Detroit, MINTSB CHI72DEM72Accident · No injuriesClosedBeech A23 · Traverse Cty, MINTSB NYC72DNC51Accident · Serious injuriesClosedCessna 140 · Rochester, NHNTSB NYC72FIA23Accident · No injuriesClosedPiper J3C-85 · Chantilly, VANTSB MIA72DKG97Accident · No injuriesClosedCessna 180H · Twin Lakes, GANTSB FTW72DPG80Accident · Minor injuriesClosedPiper PA-22 · Benton, ARNTSB DEN72AD056Accident · No injuriesClosedPiper PA-28R · Lukachukai, AZNTSB CHI72DEV32Accident · No injuriesClosedBreezy RLU-1 · Batchtown, ILNTSB SEA72DYE34Accident · No injuriesClosedCessna 150 · Oak Harbor, WANTSB FTW72DPG78Accident · No injuriesClosedCessna A188B · Harrisburg, ARNTSB OAK72DVM33Accident · No injuriesClosedWaco UPF-7 · Watsonville, CANTSB NYC72DGM47Accident · No injuriesClosedCessna 150 · Sharon, PANTSB MKC72FCJ63Accident · Serious injuriesClosedPiper PA-22 · Lincoln, NENTSB FTW72FRA57Accident · Minor injuriesClosedCessna 150J · Elmaton, TXNTSB CHI72FET29Accident · Minor injuriesClosedPiper PA-28R · Mentone, INNTSB CHI72FEC41Accident · Minor injuriesClosedAeronca 15AC · Millington, MINTSB SEA72FTI19Accident · No injuriesClosedCessna 172H · Drummond, MTNTSB MKC72FCG55Accident · No injuriesClosedBeech C-45H · Paola, KSNTSB CHI72FLQ39Accident · Minor injuriesClosedCessna 182A · Elizabethtown, KYNTSB DEN72AD055Accident · 9 fatalClosedBeech 65-B80 · Albuquerque, NMNTSB ANC72FAA32Accident · Serious injuriesClosedCessna 120 · Fairbanks, AKNTSB DEN72FQA40Accident · No injuriesClosedCessna 150E · Waterflow, NMNTSB CHI72DEI42Accident · Serious injuriesClosedCessna 172 · Petersburg, OHNTSB OAK72FXQ33Accident · No injuriesClosedCessna 310 · Reno, NVNTSB MIA72FKJ55Accident · No injuriesClosedCessna A188A · Marion, ALNTSB FTW72DRD29Accident · Minor injuriesClosedBoeing B75N1 · Mermentau, LANTSB CHI72AC093Accident · 1 fatalClosedCessna 150F · Fort Wayne, INNTSB MKC72FER59Accident · No injuriesClosedChampion 7FC · Mankato, MN