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 FTW79DQG38Accident · Minor injuriesClosedAero Comdr 100 · Canadian, TXNTSB OAK79DVG41Accident · Serious injuriesClosedGrumman G-164A · Nchico, CANTSB CHI79FEX31Accident · Minor injuriesClosedCessna 172 · Martinsville, INNTSB ANC79FA050Accident · 1 fatalClosedAeronca 7BCM · Juneau, AKNTSB MIA79FA085Accident · 1 fatalClosedCessna 182P · Eastover, SCNTSB MIA79DA104Accident · No injuriesClosedAero Comdr 500 · Treasure Cay, Burkina FasoNTSB NYC79FNE14Accident · Minor injuriesClosedPiper PA-28 · East Haven, CTNTSB MKC79DER38Accident · No injuriesClosedCessna 182P · Ogema, MNNTSB FTW79FRD35Accident · No injuriesClosedGrumman G-164A · Basile, LANTSB FTW79DPJ17Accident · No injuriesClosedGrumman G-164B · Ft.Cobb, OKNTSB DEN79FA040Accident · No injuriesClosedBell 206B · Goberador, NMNTSB MIA79DLD66Accident · No injuriesClosedPiper PA-36 · Astatulo, FLNTSB IAD79FIJ06Accident · No injuriesClosedCessna 172L · Fayetteville, WVNTSB IAD79FLJ10Accident · No injuriesClosedPiper PA-28 · Linden, NCNTSB ANC79FAG50Accident · No injuriesClosedPiper PA-28 · Montanna Creek, AKNTSB SEA79DYM33Accident · No injuriesClosedCessna 188B · Fox, ORNTSB FTW79DQD10Accident · No injuriesClosedHolcombe KR-2 · Sanderson, TXNTSB SEA79FYM32Accident · No injuriesClosedHiller Acft UH-12E · Independence, ORNTSB DEN79DTE36Accident · No injuriesClosedCessna 182 · Center, CONTSB CHI79DEC23Accident · Serious injuriesClosedCessna 206 · Bad Axe, MINTSB DEN79FQA28Accident · Serious injuriesClosedPiper PA-28 · Gallup, NMNTSB SEA79FYK09Accident · Minor injuriesClosedPiper PA-28R · Grants Pass, ORNTSB IAD79FLQ10Accident · Serious injuriesClosedCessna 150 · Richmond, KYNTSB ANC79FA048Accident · 1 fatalClosedPiper PA-18 · Anchorage, AKNTSB ANC79DAG48Accident · No injuriesClosedPiper PA-18 · Kodiak, AKNTSB FTW79DPD18Accident · Serious injuriesClosedTurner T-40A · Abilene, TXNTSB FTW79DRD25Accident · No injuriesClosedGrumman G-164A · Midland, LANTSB DEN79FQD07Accident · No injuriesClosedBeech 35-C33 · Lordsburg, NMNTSB FTW79DRD26Accident · No injuriesClosedCessna 180 · Chandeleur Is, LANTSB FTW79FPG30Accident · No injuriesClosedCessna 177 · Morrilton, ARNTSB MIA79FA078Accident · 1 fatalClosedPiper PA-30 · Lake Worth, FLNTSB FTW79DQG34Accident · No injuriesClosedCessna 150 · Spur, TXNTSB NYC79FHM16Accident · Minor injuriesClosedBellanca 14-13 · Warwick, NYNTSB MIA79DLT05Accident · Minor injuriesClosedEntwicklung C · Southaven, MSNTSB IAD79FA045Accident · 3 fatalClosedPiper PA-28 · Cynthiana, KYNTSB DEN79DQA27Accident · No injuriesClosedCessna 182RG · Chama, NMNTSB SEA79FYM29Accident · Minor injuriesClosedCessna 152 · Independence, ORNTSB LAX79FUG33Accident · Minor injuriesClosedCessna 150L · Lake Matthews, CANTSB DEN79FTE32Accident · Minor injuriesClosedCessna 150 · Boulder, CONTSB CHI79FEP38Accident · Serious injuriesClosedPiper PA-23 · Park Falls, WINTSB LAX79FVA28Accident · Serious injuriesClosedVans RV3 · Bakersfield, CANTSB FTW79FA075Accident · 2 fatalClosedPiper PA-20 · Tulsa, OKNTSB CHI79FEX23Accident · Minor injuriesClosedLuscombe 8E · Lanesville, INNTSB MKC79FTK10Accident · No injuriesClosedBellanca 7GCBC · Long Lake, SDNTSB MIA79FKQ09Accident · Minor injuriesClosedPiper PA-22 · Newton, MSNTSB MIA79DLA25Accident · No injuriesClosedBeech V35A · Newberry, FLNTSB IAD79FIA10Accident · No injuriesClosedPiper PA-28 · Bayse, VANTSB FTW79FRD23Accident · No injuriesClosedGrumman G-164A · Basile, LANTSB LAX79DUJ63Accident · No injuriesClosedBeech F33A · Goodyear, AZNTSB CHI79FEI21Accident · No injuriesClosedCessna 210B · Elyria, OH