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 NYC73FIJ09Accident · No injuriesClosedCessna 310J · Wise, VANTSB NYC73FHM16Accident · Minor injuriesClosedPiper PA-22 · Colts Neck, NJNTSB DEN73FQA20Accident · No injuriesClosedCessna P206 · Tres Piedrs, NMNTSB FTW73IFO15Incident · No injuriesClosedDouglas DC-10 · Tulsa, OKNTSB MIA73DKJ32Accident · No injuriesClosedCessna 150L · Ozark, ALNTSB ANC73DAG53Accident · No injuriesClosedPiper J5 · Chugiak, AKNTSB NYC73DNC35Accident · Minor injuriesClosedCessna 150 · Rockland, MENTSB NYC73INO54Accident · No injuriesClosedCessna 411 · Marlton, NJNTSB CHI73FEV14Accident · No injuriesClosedPiper PA-30 · Robinson, ILNTSB MIA73DLD20Accident · No injuriesClosedPiper PA-23 · Bartow, FLNTSB MKC73DCA06Accident · No injuriesClosedCessna A188A · Fisk, MONTSB OAK73DVA25Accident · No injuriesClosedCessna 150 · Lone Pine, CANTSB CHI73AC040Accident · 2 fatalClosedPiper PA-28R · Bloomington, ILNTSB CHI73FEI16Accident · No injuriesClosedStinson 108-3 · Elyria, OHNTSB ANC73FAA14Accident · No injuriesClosedErcoupe 415D · Fairbanks, AKNTSB MKC73FER24Accident · No injuriesClosedAmer Avco AA1A · Eden Prairie, MNNTSB LAX73DUG2IAccident · No injuriesClosedPiper PA-28 · Havasu Ldg, CANTSB NYC73FNC27Accident · Minor injuriesClosedPiper PA-20 · Hampden, MENTSB MKC73FCQ17Accident · No injuriesClosedBede BD5A · Newton, KSNTSB MKC73FCG14Accident · No injuriesClosedPiper PA-28 · Leawood, KSNTSB MIA73DKG41Accident · No injuriesClosedCallair A-9 · Fairmount, GANTSB LAX73DLJ29Accident · No injuriesClosedPiper PA-25 · Marana, AZNTSB MKC73DTK07Accident · Minor injuriesClosedPiper PA-22 · Mioland, SDNTSB FTW73DPG27Accident · No injuriesClosedPiper PA-28 · Judsonia, ARNTSB MIA73AM038Accident · No injuriesClosedCurtiss WRT C-46A · Miami, FLNTSB CHI73ACO37Accident · No injuriesClosedBeech SNB-5 · Chicago, ILNTSB SEA73FYA13Accident · Serious injuriesClosedBeech 35-A33 · Hailey, IDNTSB NYC73FNE09Accident · Minor injuriesClosedPiper PA-22 · Oxford, CTNTSB MIA73FKQ19Accident · 2 fatalClosedPientonpol Camper · Ocean Sprngs, MSNTSB MIA73DKJ26Accident · No injuriesClosedAero Comdr 100 · Slocomb, ALNTSB CHI73DEA16Accident · No injuriesClosedPiper PA-22 · New Point, INNTSB ANC73DAD03Accident · No injuriesClosedTaylorcraft BC12-D · Auke Bay, AKNTSB NYC73FHM13Accident · No injuriesClosedStinson 108 · Flanders, NJNTSB FTW74DPG24Accident · No injuriesClosedCallair A-9 · Rudy, ARNTSB MIA73DKQ16Accident · No injuriesClosedGrumman G-164 · Monticello, MSNTSB LAX73FUJ33Accident · Serious injuriesClosedBeech V35 · Chinle, AZNTSB LAX73DUG20Accident · No injuriesClosedBoeing E75 · Ripley, CANTSB OAK73AP008Accident · Serious injuriesClosedCanadair Mark 5 · Sacramento, CANTSB CHI73FEE24Accident · Serious injuriesClosedCessna 172 · Morrison, ILNTSB NYC73AN045Accident · 2 fatalClosedBeech E18S · Newark, NJNTSB NYC73FKM17Accident · Minor injuriesClosedPiper J3C-65 · Indian Trail, NCNTSB CHI73FEK06Accident · No injuriesClosedPiper PA-28 · Gahanna, OHNTSB MIA73AM033Accident · 2 fatalClosedAero Comdr 100 · Tarrant City, ALNTSB OAK73DXQ18Accident · No injuriesClosedBeech D35 · Truckee, CANTSB ANC73FAG37Accident · No injuriesClosedPiper PA-18 · Glennallen, AKNTSB MIA73AM032Accident · 2 fatalClosedErco 415-C · Sebastion, FLNTSB MIA73AM031Accident · 4 fatalClosedBeech E18S · Sumter, SCNTSB DEN73DQA17Accident · Minor injuriesClosedPiper PA-12 · Glencoe, NMNTSB CHI73DEG05Accident · No injuriesClosedPiper PA-28 · Proctorville, OHNTSB SEA73DYC09Accident · No injuriesClosedCessna 120 · Mltn-Frewatr, OR