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 MIA77DLD66Accident · No injuriesClosedPiper J3 · Bartow, FLNTSB OAK77DVA36Accident · No injuriesClosedCessna 150 · Hanford, CANTSB NYC77FHA27Accident · Minor injuriesClosedAeronca 7AC · Warrington, PANTSB OAK77FXQ23Accident · Minor injuriesClosedBellanca 14-13 · Minden, NVNTSB SEA77DYK16Accident · No injuriesClosedBoeing PT-17 · Lakeview, ORNTSB FTW77FRD34Accident · Minor injuriesClosedChampion 7FC · Kinder, LANTSB MKC77FTK24Accident · No injuriesClosedPiper PA-36 · Hayes, SDNTSB SEA77FTA21Accident · No injuriesClosedPiper J3C-65 · Scobey, MTNTSB MKC77FTK23Accident · Serious injuriesClosedCessna 170 · Murdo, SDNTSB SEA77FYM37Accident · Serious injuriesClosedTailwind W8 · Albany, ORNTSB NYC77FFA27Accident · Serious injuriesClosedPiper PA-28 · Hudson Falls, NYNTSB MKC77FCQ40Accident · No injuriesClosedTaylorcraft DCO-65 · Salina, KSNTSB MKC77FCA23Accident · No injuriesClosedErco 415C · Creve Coeur, MONTSB IAD77FIA16Accident · No injuriesClosedFleet 1 · Bealton, VANTSB FTW77FRA26Accident · Serious injuriesClosedBellanca 7KCAB · Pearland, TXNTSB MKC77FER45Accident · No injuriesClosedPiper PA-28 · Alexandria, MNNTSB MKC77FER44Accident · Minor injuriesClosedAeronca O-58 · Isle, MNNTSB ANC77DAA23Accident · No injuriesClosedPiper PA-22 · Big Delta, AKNTSB NYC77FHA23Accident · Serious injuriesClosedCessna 172 · Basking Ridge, NJNTSB LAX77AA048Accident · No injuriesClosedBoeing 727 · Tucson, AZNTSB FTW77DPJ21Accident · Minor injuriesClosedCessna A188 · Lawton, OKNTSB OAK77DYGH0Accident · No injuriesClosedGruman G-164 · Biggs, CANTSB FTW77DRA24Accident · No injuriesClosedCessna 188 · Wadsworth, TXNTSB CHI77FEX32Accident · No injuriesClosedPiper PA-28 · Jeffersonville, INNTSB NYC77DFJ24Accident · Minor injuriesClosedWaco JYM · Skaneateles, NYNTSB MIA77FLD63Accident · Minor injuriesClosedBaby GR LKS BGL B1 · Lakeland, FLNTSB MIA77FLD61Accident · Serious injuriesClosedStinson 108-2 · Frostproof, FLNTSB MIA77DKG31Accident · No injuriesClosedCessna A188B · Rochelle, GANTSB LAX77FUQ31Accident · No injuriesClosedPiper PA-28 · Quartz Hill, CANTSB MKC77DCQ38Accident · Minor injuriesClosedCessna 150 · Maize, KSNTSB OAK77FVM15Accident · No injuriesClosedAeronca 7BCM · Palo Alto, CANTSB OAK77DVW18Accident · No injuriesClosedPiper PA-32R · Death Valley, CANTSB DEN77FTE50Accident · Minor injuriesClosedCessna 182P · Ft Collins, CONTSB NYC77FFJ28Accident · No injuriesClosedPiper PA-22 · Mayville, NYNTSB IAD77FA041Accident · 1 fatalClosedPiper PA-34 · Bridgeport, WVNTSB CHI77FEE23Accident · Minor injuriesClosedPiper PA-23 · Streator, ILNTSB CHI77FEI27Accident · No injuriesClosedCessna 150 · Lattasburg, OHNTSB NYC77FA059Accident · 1 fatalClosedCessna 172K · Flushing, NYNTSB MKC77FCD20Accident · No injuriesClosedPiper PA-28 · Oskaloosa, IANTSB FTW77F0G27Accident · No injuriesClosedPiper PA-28 · Lubbock, TXNTSB CHI77FEI28Accident · No injuriesClosedGrum Amer AA-1 · Cleveland, OHNTSB NYC77FFJ23Accident · Serious injuriesClosedCessna 150H · Brant, NYNTSB IAD77FIG19Accident · Minor injuriesClosedPiper PA22 · Laytonsville, MDNTSB FTW77DPG39Accident · Minor injuriesClosedGrumman G-164A · Weiner, ARNTSB FTW77DPG37Accident · No injuriesClosedGrumman G-164A · Brinkley, ARNTSB NYC77FFJ22Accident · No injuriesClosedStinson 108-1 · Newark, NYNTSB FTW77FRD25Accident · No injuriesClosedGrumman G-164A · Welsh, LANTSB DEN77FTE44Accident · Serious injuriesClosedPiper PA-22 · Englewood, CONTSB SEA77FYE20Accident · No injuriesClosedCub J3-65 · Issaquah, WANTSB NYC77FFA25Accident · Minor injuriesClosedBeech D35 · Bloomingburg, NY