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 LAX77FUM27Accident · No injuriesClosedNaval Fcty N3N-3 · Brawley, CANTSB IAD77DLQ11Accident · Minor injuriesClosedCessna 150 · Prestonburg, KYNTSB NYC77FFJ16Accident · No injuriesClosedPiper PA-22 · Angola, NYNTSB NYC77FFJ15Accident · No injuriesClosedPorterfield CP-65 · Hilton, NYNTSB IAD77FLJ11Accident · No injuriesClosedPiper PA-28 · Pinehurst, NCNTSB IAD77DKW17Accident · No injuriesClosedBeech 35 · Sewanee, TNNTSB IAD77DLT03Accident · No injuriesClosedRaven RX6 · Huntingdon, TNNTSB CHI77FEP30Accident · Serious injuriesClosedPiper PA-28 · Kansasville, WINTSB CHI77DEP31Accident · No injuriesClosedCessna 150 · Berlin, WINTSB NYC77FNC23Accident · No injuriesClosedCessna 182P · Stonington, MENTSB FTW77FRG35Accident · No injuriesClosedCessna 195 · Port O'Connor, TXNTSB FTW77FQG19Accident · Serious injuriesClosedCessna A188B · Borger, TXNTSB OAK77FA028Accident · 1 fatalClosedPiper PA28 · Auberry, CANTSB LAX77FUM24Accident · No injuriesClosedBellanca 7EC · El Centro, CANTSB SEA77FYM25Accident · 1 fatalClosedMooney M20E · Toledo, ORNTSB SEA77FA025Accident · 2 fatalClosedPiper PA-28 · Sekiu, WANTSB LAX77FUQ24Accident · Serious injuriesClosedPorterfield LP-65 · San Fernando, CANTSB LAX77FA034Accident · 2 fatalClosedPiper PA-28 · Saugus, CANTSB CHI77FET13Accident · Serious injuriesClosedStarduster SA200 · Rensselaer, INNTSB NYC77FFJ14Accident · No injuriesClosedPiper PA-24 · Syracuse, NYNTSB NYC77FFA18Accident · No injuriesClosedPiper PA-28 · Duanesburg, NYNTSB MIA77FA048Accident · 1 fatalClosedCessna 207 · Atlanta, GANTSB LAX77DUJ40Accident · No injuriesClosedCessna 170 · Steamboat Cyn, AZNTSB FTW77DPJ15Accident · No injuriesClosedPiper PA-25 · Arnett, OKNTSB MIA77DKT55Accident · Minor injuriesClosedPiper PA-32 · Ft Meyers, FLNTSB ANC77FAG48Accident · No injuriesClosedCessna 185 · Anchorage, AKNTSB NYC77FGT10Accident · No injuriesClosedPiper PA-28R · Thomasville, PANTSB ANC77FAG46Accident · No injuriesClosedBeech B24R · Anchorage, AKNTSB NYC77IA041Incident · No injuriesClosedBoeing 747 · London, United KingdomNTSB OAK77DVG20Accident · No injuriesClosedGrumman G-164 · Esparto, CANTSB OAK77DVA25Accident · No injuriesClosedCessna 188B · Merced, CANTSB NYC77FFA16Accident · No injuriesClosedCessna 182P · Frankford, NYNTSB MKC77FCD14Accident · Serious injuriesClosedPiper PA-24 · Spirit Lake, IANTSB SEA77DYE14Accident · Minor injuriesClosedPiper PA-28 · Westport, WANTSB CHI77FEX16Accident · No injuriesClosedEnstrom F28A · Mitchell, INNTSB OAK77DVD22Accident · No injuriesClosedWeatherly 201B · Stockton, CANTSB MKC77FCQ24Accident · Minor injuriesClosedCessna 150M · Junction City, KSNTSB FTW77DPG21Accident · No injuriesClosedGrumman G-164 · Devalls Bruff, ARNTSB MIA77FLD34Accident · Serious injuriesClosedStinson 108-1 · Winter Haven, FLNTSB FTW77FPJ07Accident · No injuriesClosedCessna 180D · Thomas, OKNTSB ANC77FAG41Accident · Minor injuriesClosedCessna 185 · Girdwood, AKNTSB CHI77DEP22Accident · No injuriesClosedCessna 150 · Pewaukee, WINTSB OAK77DVD25Accident · No injuriesClosedPiper PA-25 · Healdsburg, CANTSB NYC77FGT09Accident · Minor injuriesClosedMooney M20 · Kirkwood, PANTSB MKC77FER24Accident · No injuriesClosedCessna 172 · Backus, MNNTSB MIA77FKT26Accident · Serious injuriesClosedScorpion II · Royal Palm Bch, FLNTSB IAD77FA027Accident · 1 fatalClosedMooney M20C · Forest, VANTSB NYC77FA035Accident · 3 fatalClosedBeech V35B · Nashua, NHNTSB IAD77DID14Accident · No injuriesClosedBeech C23 · Portsmouth, VANTSB OAK77DXQ10Accident · No injuriesClosedMaule 210C · Kings Riv Vly, NV