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 CHI80FEX21Accident · Minor injuriesClosedRand KR-1 · Sheridan, INNTSB CHI80FER47Accident · Minor injuriesClosedPiper PA-25 · Hector, MNNTSB MKC80FCQ19Accident · 1 fatalClosedBenchmark 01 · Newton, KSNTSB MKC80FCD17Accident · No injuriesClosedBoeing A75 · Sioux City, IANTSB FTW80FPM11Accident · No injuriesClosedPiper PA-28 · Okmulgee, OKNTSB ATL80FA051Accident · 2 fatalClosedCessna 172 · Salisbury, NCNTSB LAX80FVG46Accident · Serious injuriesClosedGrumman G-164C · Richvale, CANTSB ATL80FLQ19Accident · Serious injuriesClosedErco 415-C · Shepherdstown, KYNTSB MKC80FCJ13Accident · No injuriesClosedGreat Lakes 01 · Omaha, NENTSB LAX80DUM22Accident · No injuriesClosedCessna 150 · Oceanside, CANTSB ATL80FKJ11Accident · Minor injuriesClosedCessna 150 · Decatur, ALNTSB MIA80DLD69Accident · No injuriesClosedCessna 172N · Captiva Island, FLNTSB FTW80FQA31Accident · Minor injuriesClosedCessna 172M · Capitan, NMNTSB FTW80DPG32Accident · No injuriesClosedCessna A188B · Evening Star, ARNTSB DEN80FTA12Accident · No injuriesClosedCessna 150 · Winnett, MTNTSB ATL80FLJ16Accident · No injuriesClosedCessna A188B · Harlowe, NCNTSB MKC80FCA17Accident · No injuriesClosedCessna 150 · Chesterfield, MONTSB LAX80DVG44Accident · Minor injuriesClosedAero Comdr 600S2R · Colusa, CANTSB FTW80FQG23Accident · No injuriesClosedCessna 150 · Lubbock, TXNTSB ATL80FLG11Accident · Minor injuriesClosedCessna 120 · Union, SCNTSB DEN80FTE46Accident · 2 fatalClosedBullen Bede 4 · Colorado Sprgs, CONTSB MIA80FKT41Accident · No injuriesClosedPiper PA-36 · Ft.Lauderdale, FLNTSB ATL80FA049Accident · 6 fatalClosedPiper PA-31 · Mobile, ALNTSB FTW80DRA33Accident · No injuriesClosedAir Tractor AT-301 · Alvin, TXNTSB CHI80FEG14Accident · Serious injuriesClosedPiper PA-28 · New Madison, OHNTSB CHI80FEM26Accident · No injuriesClosedBeech B-23 · Onaway, MINTSB FTW80DPG27Accident · No injuriesClosedCessna 188B · Gould, ARNTSB CHI80FEV23Accident · No injuriesClosedCessna 310L · Carbondale, ILNTSB CHI80FA042Accident · 2 fatalClosedGrum-Amer AA-1C · Portage, WINTSB LAX80FUG39Accident · No injuriesClosedNa Rockwell 114 TC · Baker, CANTSB FTW80FRD34Accident · No injuriesClosedCessna 180 · New Iberia, LANTSB FTW80FPG24Accident · No injuriesClosedCessna 182 · Ozark, ARNTSB FTW80DRA32Accident · No injuriesClosedGrumman G-164A · Beaumont, TXNTSB NYC80FA022Accident · 1 fatalClosedMaule 235C · Eagle Lake, MENTSB LAX80DVG40Accident · No injuriesClosedNaval Fcty N3N-3 · Richvale, CANTSB CHI80FEP29Accident · No injuriesClosedCassutt 111M · Stevens Pt, WINTSB ANC80DA047Accident · No injuriesClosedCessna 180 · Cordova, AKNTSB ANC80DA046Accident · Minor injuriesClosedPiper PA-32 · Nunavarchuk, AKNTSB LAX80FA098Accident · No injuriesClosedConsolidate PBY-5 · Davis, CANTSB ANC80FA045Accident · 1 fatalClosedAeronca 15AC · Wasilla, AKNTSB ATL80FIA08Accident · Minor injuriesClosedCessna 150 · Upperville, VANTSB LAX80FVM30Accident · Minor injuriesClosedKR 2 · Half Moon Bay, CANTSB FTW80FA073Accident · Minor injuriesClosedPiper PA-31 · Fort Worth, TXNTSB DEN80DTM18Accident · Minor injuriesClosedCessna 182Q · Richfield, UTNTSB LAX80FUJ57Accident · Minor injuriesClosedCessna T210N · Chandler, AZNTSB LAX80FA096Accident · 2 fatalClosedPiper PA-34 · Redlands, CANTSB FTW80FPJ17Accident · No injuriesClosedBellanca 8GCBC · Enid, OKNTSB FTW80DRD32Accident · No injuriesClosedGrumman G-164B · Evangeline, LANTSB FTW80DRD30Accident · No injuriesClosedGrumman G-164A · Jennings, LANTSB ANC80DAG48Accident · No injuriesClosedBellanca 7GCBC · Anchorage, AK