NTSB investigations
18,851 cases where the phase of flight was Maneuvering.
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 = 450)
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 = 450)
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 MIA73FKT11Accident · No injuriesClosedPitts Spcl S-2A · Miami, FLNTSB FTW73FRJ06Accident · 1 fatalClosedPiper PA-18 · Tallulah, LANTSB DEN73DTE12Accident · No injuriesClosedPiper PA-25 · Rocky Ford, CONTSB MKC73DCQ09Accident · No injuriesClosedBoeing E75 · Copeland, KSNTSB MKC73AK011Accident · 2 fatalClosedN.American SNJ-5 · Kingman, KSNTSB LAX73FUJ06Accident · No injuriesClosedGrumman G-164A · Guadalupe, AZNTSB FTW73FPG08Accident · Serious injuriesClosedStearman E75N1 · Pollard, ARNTSB NYC73AN020Accident · 1 fatalClosedChampion 7KCAB · Windsor, VANTSB MIA73FKG17Accident · No injuriesClosedPiper PA-25 · Chula, GANTSB FTW73FQG08Accident · 1 fatalClosedPiper PA-25 · Stratford, TXNTSB ANC73DAA05Accident · No injuriesClosedPiper PA-14 · Wales, AKNTSB MIA73FLA10Accident · 1 fatalClosedAero Comdr A-9B · Cottondale, FLNTSB MIA73RM013Accident · 5 fatalClosedCessna 310C · Normans Cay, Burkina FasoNTSB MIA73FKT08Accident · Serious injuriesClosedCessna 175 · Port Charlote, FLNTSB LAX73DUJ09Accident · No injuriesClosedPiper PA-25 · Picacho, AZNTSB MIA73DKG15Accident · No injuriesClosedPiper PA-25 · Shellman, GANTSB FTW73FPG07Accident · No injuriesClosedGrumman G-164A · Coy, ARNTSB DEN73FTE10Accident · Serious injuriesClosedSnow 600S2C · Wray, CONTSB MIA73FKG11Accident · No injuriesClosedAero Comdr A-9 · Warrenton, GANTSB SEA73DYA02Accident · No injuriesClosedPiper PA-25 · Terreton, IDNTSB NYC73FID03Accident · Minor injuriesClosedPiper PA-25 · Newsoms, VANTSB FTW73FQG07Accident · Serious injuriesClosedPiper PA-25 · Dumas, TXNTSB FTW73DPG05Accident · No injuriesClosedPiper PA-25 · Eudora, ARNTSB CHI73DEV05Accident · No injuriesClosedBell 47G-2 · Murdock, ILNTSB MKC73AK010Accident · 1 fatalClosedCessna 150J · Gravois Mills, MONTSB MIA73FLG07Accident · No injuriesClosedBell 47G-2 · Pinewood, SCNTSB MIA73DKG08Accident · Minor injuriesClosedPiper PA-18A · Cordele, GANTSB FTW73DRG04Accident · No injuriesClosedFunk F-23 · Los Fresnos, TXNTSB SEA73FYE05Accident · No injuriesClosedHiller Acft FH1100 · Skykomish, WANTSB MIA73FKA01Accident · No injuriesClosedLake LA-4 · Charltte Amlie, VINTSB FTW73FRG03Accident · Serious injuriesClosedPiper PA-18 · Portland, TXNTSB MIA73FLG06Accident · No injuriesClosedPiper J3C · Cades, SCNTSB OAK73FVA07Accident · No injuriesClosedBoeing A75N1 · Fresno, CANTSB SEA73DYG04Accident · Minor injuriesClosedPiper PA-25 · Othello, WANTSB MKC73FCD04Accident · Serious injuriesClosedGrumman G164 · Northwood, IANTSB SEA73DYG03Accident · No injuriesClosedGrumman G-164A · Touchet, WANTSB NYC73AN010Accident · 4 fatalClosedCessna T337D · Belfast, MENTSB FTW73FRJ03Accident · No injuriesClosedGrumman G-164A · Ferriday, LANTSB FTW73FQG03Accident · No injuriesClosedPiper PA-25 · Garden City, TXNTSB MKC73AK006Accident · 2 fatalClosedCessna 150 · Ravanna, MONTSB CHI73DEM03Accident · No injuriesClosedPiper PA-25 · Munger, MINTSB MKC73FTK01Accident · No injuriesClosedGrumman G-164 · Pukwana, SDNTSB DEN73FQA05Accident · 2 fatalClosedBoeing B-17 · Socorro, NMNTSB MIA73FKJ03Accident · Serious injuriesClosedCallair A-9B · Demopolis, ALNTSB UNK72X0110Accident · No injuriesClosedHughes 269 · Eucott Bay, CanadaNTSB MKC73FCA02Accident · Serious injuriesClosedPiper PA-25 · Kewanee, MONTSB MKC73DCJ07Accident · No injuriesClosedPiper PA-25 · Humbolt, NENTSB MIA73DKJ02Accident · Serious injuriesClosedAero Comdr A-9B · Greensboro, ALNTSB FTW73DRA06Accident · Minor injuriesClosedCessna 188 · Wharton, TXNTSB MIA73FLD01Accident · Minor injuriesClosedCessna 150 · Jensen Beach, FL