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 DEN73DTM24Accident · No injuriesClosedCessna 172 · Navajo Mt, UTNTSB CHI73DER06Accident · Serious injuriesClosedCessna 177 · Baldwin, WINTSB IAD73FKW21Accident · No injuriesClosedMooney M20F · Alcoa, TNNTSB CHI73FEK18Accident · No injuriesClosedCessna 177 · Johnstown, OHNTSB MKC73DCD53Accident · No injuriesClosedPiper PA-25 · Hornick, IANTSB LAX73FUM26Accident · Serious injuriesClosedChampion 7BCM · Ocotilo Wls, CANTSB CHI73AC075Accident · 1 fatalClosedPiper PA-28 · Knox, INNTSB OAK73DVG52Accident · No injuriesClosedBellanca 7ACA · Redding, CANTSB IAD73A1001Accident · 1 fatalClosedPiper PA-12 · Selbyville, DENTSB IAD73FI620Accident · No injuriesClosedCessna 172B · Berkely Spgs, WVNTSB MKC73FER44Accident · No injuriesClosedMooney M20A · Duluth, MNNTSB MIA73OKT71Accident · No injuriesClosedBeech 65 · West End, Burkina FasoNTSB MIA73FKJ42Accident · No injuriesClosedCessna 150 · Athens, ALNTSB SEA73FYG24Accident · No injuriesClosedLuscombe 8F · Newman Lake, WANTSB MIA73FLG35Accident · No injuriesClosedPiper PA-22 · Gaffney, SCNTSB FTW73FQG33Accident · No injuriesClosedTaylorcraft BL-65 · Spearman, TXNTSB NYC73FNE21Accident · No injuriesClosedPiper PA-22 · Westboro, MANTSB MIA73DLG34Accident · No injuriesClosedAmer Avco AA-1B · Aiken, SCNTSB CHI73FEC23Accident · No injuriesClosedCessna 182J · New Hudson, MINTSB MIA73FKQ24Accident · No injuriesClosedCessna A188 · Lexington, MSNTSB MIA73AM087Accident · 7 fatalClosedGates Lear 24 · Atlanta, GANTSB LAX73FUJ52Accident · No injuriesClosedCessna 172 · Show Low, AZNTSB CHI73FCA04Accident · Serious injuriesClosedChampion 7KCAB · Chaokia, ILNTSB DEN73FTE59Accident · Serious injuriesClosedPiper PA-28 · Broomfield, CONTSB NYC73AN1L5Accident · 1 fatalClosedCessna 310G · Sutton, WVNTSB NYC73FIA12Accident · No injuriesClosedCessna 172 · Richardsville, VANTSB MIA73FKT66Accident · Serious injuriesClosedBuehler 103-S · Ft Lauderdale, FLNTSB NYC73FNA38Accident · Serious injuriesClosedAeronca 7AC · Beverly, MANTSB LAX73DUG35Accident · No injuriesClosedAero Comdr A-9B · Sunnymead, CANTSB OAK73DVM23Accident · No injuriesClosedCessna 172 · Salinas, CANTSB NYC73DHJ16Accident · No injuriesClosedCessna 150 · White Plains, NYNTSB LAX73DUJ55Accident · No injuriesClosedSchweizer SGS232 · Maricopa, AZNTSB MKC73 CG33Accident · Serious injuriesClosedCessna 177 · Warrensburg, MONTSB CHI73FEG18Accident · No injuriesClosedErcoupe 415-C · Brookville, OHNTSB LAX73FUD08Accident · No injuriesClosedCessna 182P · Hawthorne, CANTSB NYC73FHD26Accident · No injuriesClosedCessna 150L · Williamstown, NJNTSB CHI73FEP38Accident · Serious injuriesClosedCassutt Sport · Waukesha, WINTSB NYC73FHD25Accident · Minor injuriesClosedPiper PA-22 · Cheswold, DENTSB FTW73FRG48Accident · Minor injuriesClosedBeech D18C · Del Rio, TXNTSB DEN73FQG20Accident · Minor injuriesClosedBeech A35 · Elida, NMNTSB CHI73FEG17Accident · Minor injuriesClosedCessna 172 · Moraine, OHNTSB OAK73FJA12Accident · Serious injuriesClosedBell 47G-5 · Koloa, HINTSB NYC73FIA11Accident · Minor injuriesClosedHoward DGA15P · Hartwood, VANTSB FTW73AF041Accident · 2 fatalClosedChampion 7KCAB · Waxahachie, TXNTSB DEN73FTE50Accident · Serious injuriesClosedPiper PA-28 · Greeley, CONTSB DEN73FTC18Accident · Minor injuriesClosedPiper PA-28 · Cheyenne, WYNTSB SEA73DYI09Accident · No injuriesClosedCessna 182J · Grants Pass, ORNTSB FTW73FPJ07Accident · No injuriesClosedPiper PA-18 · Fredrick, OKNTSB CHI73FEI24Accident · No injuriesClosedBeech A23-19 · Cleveland, OHNTSB MIA73FKT53Accident · Serious injuriesClosedBell 47G · Miami Beach, FL