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 MIA75DKT14Accident · Serious injuriesClosedLet-Np-K L-13 · Boca Raton, FLNTSB FTW75FPG20Accident · Serious injuriesClosedTaylorcraft BC12-D · Jacksonville, ARNTSB CHI75FEE21Accident · No injuriesClosedChampion 7ECA · Earlville, ILNTSB CHI75FEC13Accident · No injuriesClosedBellanca 14-19 · Jackson, MINTSB NYC75FGM11Accident · No injuriesClosedPiper PA-22 · West Hickory, PANTSB MKC75DCD20Accident · No injuriesClosedPiper PA-28 · Milford, IANTSB ANC75AA026Accident · No injuriesClosedCessna 180 · Anchorage, AKNTSB MKC75AK020Accident · 1 fatalClosedMaule M4-220 · Grand Marias, MNNTSB MIA75FLG13Accident · Serious injuriesClosedLuscombe 8E · Chester, SCNTSB DEN75AD011Accident · 1 fatalClosedCessna 310 · Rawlins, WYNTSB CHI75AC026Accident · 2 fatalClosedBeech E18S · Madison, INNTSB MIA75DKJ18Accident · No injuriesClosedPiper PA-25 · Gantt, ALNTSB DEN75DQA14Accident · Serious injuriesClosedBoeing E75N1 · Gallup, NMNTSB ANC75DAA10Accident · No injuriesClosedPiper PA-18 · Fairbanks, AKNTSB ANC75AA023Accident · Serious injuriesClosedPiper PA-18 · Pontilla Lk, AKNTSB NYC75AN036Accident · 1 fatalClosedPiper PA-32 · New Bedford, MANTSB ANC75DAA16Accident · No injuriesClosedCessna 170B · Bettles, AKNTSB ANC75DAG35Accident · No injuriesClosedCessna 180 · Ugashik, AKNTSB NYC75AN031Accident · 1 fatalClosedCessna 150L · Southbury, CTNTSB FTW75DPG22Accident · No injuriesClosedGrumman G-164 · Newark, ARNTSB MIA75AM017Accident · 1 fatalClosedBellanca 14-193 · Jeffersonville, GANTSB OAK75FP010Accident · 4 fatalClosedPiper PA-28 · Reno, NVNTSB IAD75FIA02Accident · Serious injuriesClosedPiper PA-22 · Bayse, VANTSB NYC75FNE09Accident · Serious injuriesClosedAeronca 11BC · E Brookfield, MANTSB NYC75FNA15Accident · No injuriesClosedPiper PA-28 · Marston Mill, MANTSB MKC74FCA06Accident · No injuriesClosedNavion A · St Charles, MONTSB LAX75DUJ24Accident · Serious injuriesClosedStinson 108-3 · Grnd Canyon, AZNTSB LAX75AL012Accident · 3 fatalClosedCessna 177 · Adelanto, CANTSB LAX75AL011Accident · 1 fatalClosedPiper PA-22 · Theba, AZNTSB FTW75DQG20Accident · No injuriesClosedNavtion A · Stratford, TXNTSB MIA75DLD34Accident · Minor injuriesClosedCessna 188 · Ft Pierce, FLNTSB FTW75FPM03Accident · Serious injuriesClosedPiper PA-28 · Hugo, OKNTSB CHI75DEE18Accident · No injuriesClosedCessna 170B · Manteno, ILNTSB SEA75AS011Accident · 2 fatalClosedPiper PA-12 · Medford, ORNTSB NYC75FNC08Accident · Serious injuriesClosedBeech B19 · Berlin, NHNTSB ANC75AA019Accident · 1 fatalClosedPiper PA-18 · Kodiak, AKNTSB CHI75FEP20Accident · Serious injuriesClosedStinson SR-8C · Shawand, WINTSB ANC75DAA14Accident · No injuriesClosedHelio Acft H-295 · Tok, AKNTSB OAK75FVG21Accident · Minor injuriesClosedGlobe GC-1B · Chico, CANTSB OAK75DVG22Accident · No injuriesClosedCessna 150 · Sacramento, CANTSB DEN75AD006Accident · Minor injuriesClosedHiller Acft FH1100 · Pinedale, WYNTSB SEA75DYI07Accident · Minor injuriesClosedPiper PA-28 · Crescent Lk, ORNTSB NYC75DNA12Accident · Serious injuriesClosedSchleicher ASK-14 · Myricks, MANTSB CHI75FEE16Accident · No injuriesClosedBoeing E75 · Streator, ILNTSB DEN75FTE19Accident · Serious injuriesClosedChampion 7ECA · Englewood, CONTSB CHI75DER03Accident · No injuriesClosedPiper PA-12 · Amery, WINTSB OAK75FXQ17Accident · Serious injuriesClosedPiper PA-28 · Bridgeport, CANTSB FTW75FPG18Accident · No injuriesClosedPiper PA-28 · Seyppel, ARNTSB FTW75DRJ09Accident · No injuriesClosedPiper PA-25 · Simmesport, LANTSB CHI75AC021Accident · 3 fatalClosedCessna 177 · New Lenox, IL