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 SEA75FYA27Accident · Minor injuriesClosedPiper PA-32 · Hailey, IDNTSB LAX75FUG28Accident · 1 fatalClosedOWL Racer OR65-2 · Upland, CANTSB FTW75FPA16Accident · Serious injuriesClosedCessna 150G · Teague, TXNTSB MIA75AM045Accident · 1 fatalClosedCessna 177 · Pompano Beach, FLNTSB IAD75AI043Accident · 1 fatalClosedPiper PA-22 · Chamblee, GANTSB OAK75DVD33Accident · No injuriesClosedBoeing A75N1 · Santa Rosa, CANTSB CHI75AC053Accident · No injuriesClosedWestwind TC-45J · Evansville, INNTSB OAK75FXQ34Accident · Serious injuriesClosedBeech E35 · Truckee, CANTSB IAD75FIG11Accident · Serious injuriesClosedPiper PA-28 · Mitchellville, MDNTSB FTW75AF048Accident · 1 fatalClosedBellanca 17-30A · Uvalde, TXNTSB ANC76DAG63Accident · No injuriesClosedBellanca 8GCBC · Anchorage, AKNTSB MIA75AM043Accident · 1 fatalClosedBeech 95-C55 · Opa Locka, FLNTSB MIA75DKG55Accident · Minor injuriesClosedPiper PA-23 · Bruswick, GANTSB MKC75AK035Accident · 1 fatalClosedBeech 95-58 · Des Moines, IANTSB FTW75DRJ22Accident · Minor injuriesClosedTaylorcraft BL-65 · Kilbourne, LANTSB DEN75FTE43Accident · Serious injuriesClosedCessna 177 · Englewood, CONTSB ANC75AAG64Accident · Serious injuriesClosedCessna 150 · Anchorage, AKNTSB FTW75FPG30Accident · Serious injuriesClosedBeech N35 · Salem, ARNTSB DEN75FTM09Accident · Serious injuriesClosedPiper PA-28 · Bountiful, UTNTSB MKC75FER36Accident · Serious injuriesClosedCessna 180A · Detroit Lakes, MNNTSB DEN75DTE50Accident · No injuriesClosedPiper PA-28R · Crested Butte, CONTSB OAK75AP029Accident · 5 fatalClosedBeech A60 · Mammoth Lakes, CANTSB CHI75FEG10Accident · Minor injuriesClosedCessna 150F · Brookville, OHNTSB CHI75FEC32Accident · No injuriesClosedPiper PA-28 · Troy, MINTSB CHI75AC047Accident · 1 fatalClosedAeronca 7BCM · Grover Hill, OHNTSB MKC75DEG27Accident · Minor injuriesClosedAmer Avco AA1-A · Richmond, MONTSB MKC75FCD30Accident · No injuriesClosedCessna 150 · Ottuma, IANTSB LAX75FUD03Accident · No injuriesClosedCessna 172M · Snta Monica, CANTSB ANC75AAG60Accident · Serious injuriesClosedCessna 172 · Kodiak, AKNTSB ANC75AA047Accident · 1 fatalClosedPiper PA-18 · Anchorage, AKNTSB SEA75AS028Accident · 4 fatalClosedBrittnorman BN-2A · Riverton Hts, WANTSB FTW75DRD21Accident · No injuriesClosedPiper PA-28 · Lockport, LANTSB MKC75FCD27Accident · Serious injuriesClosedAeronca 7AC · Graf, IANTSB MKC75D1G16Accident · No injuriesClosedPiper J3C-65 · Esmond, NDNTSB CHI75FEI35Accident · Minor injuriesClosedCessna 150 · Flushing, OHNTSB MKC75FER34Accident · No injuriesClosedBeech V35 · St Paul, MNNTSB CHI75DEP39Accident · No injuriesClosedBeech 95-B55 · Milwaukee, WINTSB DEN75FQA22Accident · No injuriesClosedAmer Avco AA-1A · Albuquerque, NMNTSB MKC75FCG22Accident · No injuriesClosedCessna 182 · Lees Summit, MONTSB DEN75FTC12Accident · Minor injuriesClosedCessna 182 · Gillette, WYNTSB OAK75FVM17Accident · No injuriesClosedCessna 172D · San Carlos, CANTSB DEN75FTM11Accident · Minor injuriesClosedErco 415-C · Bountiful, UTNTSB CHI75FEI32Accident · Minor injuriesClosedCessna 150L · Alliance, OHNTSB NYC75AN074Accident · 3 fatalClosedCessna 172 · Philipsburg, PANTSB MKC75DCQ26Accident · No injuriesClosedCessna 172 · Conway, KSNTSB MIA75DLD43Accident · No injuriesClosedBeech C-45H · Palma Sola, FLNTSB MKC75FCD26Accident · No injuriesClosedMooney M20A · Guttenberg, IANTSB DEN75DTE38Accident · No injuriesClosedCessna 150 · Greeley, CONTSB CHI75FEE33Accident · 1 fatalClosedSmith Termit · Loves Park, ILNTSB SEA75DYA25Accident · No injuriesClosedCessna 180 · Bellevue, ID