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 CHI78FEC41Accident · Minor injuriesClosedPitts S1C · Clinton, MINTSB IAD77FLJ35Accident · No injuriesClosedMooney M20E · Knightdale, NCNTSB DEN77FTE75Accident · Minor injuriesClosedPiper PA-22 · Denver, CONTSB ANC77DAH03Accident · No injuriesClosedCessna 206 · Anchorage, AKNTSB MKC77FCG49Accident · Minor injuriesClosedMcbemas Lark · Cassville, MONTSB FTW77FPG79Accident · No injuriesClosedFairchild M-62 · Jonesboro, ARNTSB NYC77FA082Accident · Serious injuriesClosedBeech G18S · Pittsburgh, PANTSB FTW77FA069Accident · 1 fatalClosedCessna 150L · Fort Worth, TXNTSB MIA77DKJ73Accident · Minor injuriesClosedPiper PA-18 · Cullman, ALNTSB NYC77FA081Accident · 1 fatalClosedAeronca 7AC · Ottsville, PANTSB NYC77FA080Accident · Minor injuriesClosedBeech D55 · Flushing, NYNTSB MKC77FA033Accident · 3 fatalClosedCessna 172D · St.Louis, MONTSB MIA77FK030Accident · No injuriesClosedStinson 108-3 · Quitman, MSNTSB IAD77FIG32Accident · Minor injuriesClosedPiper PA-22 · Edgewater, MDNTSB DEN77FTE70Accident · Minor injuriesClosedBeech A19-23 · Peyton, CONTSB MIA77FLG32Accident · No injuriesClosedPiper PA-25 · Belton, SCNTSB MIA77FA079Accident · 1 fatalClosedCessna 150 · Ft.Lauderdale, FLNTSB DEN77FTE71Accident · No injuriesClosedMooney M20C · Aurora, CONTSB IAD77FIG33Accident · No injuriesClosedPiper PA-22 · Mitchellville, MDNTSB MKC77DCG48Accident · No injuriesClosedMooney M20C · Lee'S Summit, MONTSB OAK77FVM21Accident · No injuriesClosedBoeing PT-13D · Morgan Hill, CANTSB OAK77DXQ31Accident · Minor injuriesClosedCessna 180 · Reno, NVNTSB FTW77DQG47Accident · No injuriesClosedMooney M20C · Spearman, TXNTSB FTW77DPG74Accident · No injuriesClosedPiper PA-28 · Lead Hill, ARNTSB CHI77FEP53Accident · Serious injuriesClosedPietenpol GN1 · Wis.Rapids, WINTSB MKC77FTK34Accident · No injuriesClosedCessna 150 · Buffalo, SDNTSB MIA77FA076Accident · 2 fatalClosedChampion 7ECA · Greenville, SCNTSB LAX77FUJ78Accident · 3 fatalClosedBellanca 14-13 · Mesa, AZNTSB ANC77DAA42Accident · Minor injuriesClosedCessna 180 · Harding Lake, AKNTSB MKC77DER74Accident · No injuriesClosedPietenpol-A Scout · Mankato, MNNTSB FTW77FRJ15Accident · Serious injuriesClosedLuscombe 8E · Shreveport, LANTSB NYC77FHJ33Accident · 1 fatalClosedChampion 7GCAA · Shirley, NYNTSB ANC77FA067Accident · 1 fatalClosedDehavilland DHC-3 · Bettles, AKNTSB SEA77DYP35Accident · No injuriesClosedCessna 188 · Connell, WANTSB MIA77FA074Accident · 1 fatalClosedCessna 182D · Cusseta, GANTSB MIA77FKG59Accident · No injuriesClosedCessna 188B · Statesboro, GANTSB MIA77FA073Accident · 1 fatalClosedBellanca 7GCBC · Leland, MSNTSB DEN77DQA47Accident · No injuriesClosedCessna 150 · Santa Fe, NMNTSB OAK77DVG57Accident · No injuriesClosedGrum Amer AA1B · Elk Grove, CANTSB DEN77FTE68Accident · No injuriesClosedCessna 150 · Co Springs, CONTSB OAK77DVW28Accident · No injuriesClosedFournier RF4D · Tonopah, NVNTSB IAD77FIA22Accident · Serious injuriesClosedPiper PA-28 · Basye, VANTSB CHI77FEG22Accident · Serious injuriesClosedPiper PA-28 · Piqua, OHNTSB CHI77FEE34Accident · No injuriesClosedBeech 35 · Morris, ILNTSB OAK77DVA45Accident · No injuriesClosedBoeing A75N1 · Modesto, CANTSB NYC77FHA31Accident · 1 fatalClosedBeech 35H · Avoca, PANTSB LAX77DUJ76Accident · No injuriesClosedPiper PA-36 · Casa Grande, AZNTSB IAD77FKW24Accident · Minor injuriesClosedPiper PA-22 · Pulaski, TNNTSB ANC77DAG88Accident · Minor injuriesClosedCessna 180 · Anchorage, AKNTSB ANC77FA063Accident · 1 fatalClosedHiller 12EJ3 · Ketchikan, AK