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 MIA76FKJ79Accident · No injuriesClosedCessna 188 · Enterprise, ALNTSB FTW76FRD53Accident · Serious injuriesClosedGrumman G-164A · Crowley, LANTSB SEA76AS059Accident · 5 fatalClosedGrum Amer AA-5A · Boise, IDNTSB OAK76DXQ55Accident · No injuriesClosedSnow 600S2C · Yerington, NVNTSB NYC76AN108Accident · 2 fatalClosedLuscombe 8A · Plainfield, VTNTSB IAD76FID37Accident · No injuriesClosedGrum Amer AA-5 · Rehoboth Ch, VANTSB FTW76FPG75Accident · Serious injuriesClosedGrumman G-164A · Beedeville, ARNTSB DEN76DTE79Accident · Minor injuriesClosedPiper PA-25 · Joes, CONTSB FTW76FQD28Accident · No injuriesClosedBoeing A75N1 · Fabens, TXNTSB IAD76AI078Accident · 1 fatalClosedCessna 172 · St Pauls, NCNTSB CHI76FEK24Accident · No injuriesClosedHiller UH-12E · Lore City, OHNTSB SEA76FYG66Accident · 1 fatalClosedRawdon T-1 · Rosalia, WANTSB IAD76FLJ26Accident · Serious injuriesClosedScamp WT16 · Holly Springs, NCNTSB FTW76DPG74Accident · No injuriesClosedGrumman G-164B · Marianna, ARNTSB CHI76DEV47Accident · No injuriesClosedPiper PA-25 · Wyoming, ILNTSB MKC76DCD52Accident · No injuriesClosedPiper PA-25 · Tipton, IANTSB MIA76DKJ78Accident · Serious injuriesClosedBoeing E-75 · Headland, ALNTSB IAD76FLQ26Accident · Serious injuriesClosedPiper PA-18A · Albany, KYNTSB FTW76DPG72Accident · No injuriesClosedBell 47G-2 · Beedeville, ARNTSB CHI76AC076Accident · 1 fatalClosedAmer Avco AA1-B · Creston, OHNTSB SEA76DYG60Accident · No injuriesClosedPiper PA-25 · Othello, WANTSB SEA76FYG62Accident · No injuriesClosedCessna 188B · Lewiston, IDNTSB SEA76FYG61Accident · Minor injuriesClosedPiper PA-25 · Othello, WANTSB OAK76DVA72Accident · No injuriesClosedAero Comdr 600S2D · Los Banos, CANTSB FTW76DRG64Accident · No injuriesClosedPiper PA-18 · New Berlin, TXNTSB FTW76DPJ37Accident · No injuriesClosedBoeing E75 · Sickles, OKNTSB CHI76FEI32Accident · Serious injuriesClosedTaylorcraft BC12-D · Kirby, OHNTSB SEA76DYA32Accident · Minor injuriesClosedPiper PA-25 · Georgetown, IDNTSB MKC76FTG22Accident · Serious injuriesClosedCessna A188B · Langdon, NDNTSB CHI76DEA45Accident · No injuriesClosedPiper PA-25 · Vincennes, INNTSB ANC76AA118Accident · No injuriesClosedBell 206B · Eagle, AKNTSB OAK76FVG87Accident · 1 fatalClosedCessna 188 · Dixon, CANTSB OAK76DVG85Accident · No injuriesClosedGrumman G-164A · Willows, CANTSB MKC76DCD54Accident · No injuriesClosedBell 47J-2A · Keokuk, IANTSB OAK76DVH02Accident · No injuriesClosedHiller Acft UH-12E · Happy Camp, CANTSB MKC76DTG20Accident · No injuriesClosedCallair A9B · Minot, NDNTSB FTW76DRG68Accident · No injuriesClosedGrumman G-164 · Bishop, TXNTSB FTW76DRG66Accident · No injuriesClosedBoeing A75 · La Feria, TXNTSB NYC76FFJ26Accident · No injuriesClosedBell 47G-2 · Wayland, NYNTSB MKC76FCQ61Accident · 1 fatalClosedPiper PA-18A · Sharon Springs, KSNTSB SEA76DYG57Accident · Minor injuriesClosedGrumman G-164 · Sunnyside, WANTSB MIA76AM094Accident · 1 fatalClosedChampion 7KCAB · Lehigh, FLNTSB FTW76AF105Accident · 2 fatalClosedChampion 7FC · Dickinson, TXNTSB MKC76FCA27Accident · No injuriesClosedPiper PA-25 · Mathews, MONTSB MIA76FKG76Accident · No injuriesClosedAero Comdr 600S2R · Bowden, GANTSB FTW76DPG70Accident · Minor injuriesClosedPiper PA-25 · Greenway, ARNTSB DEN76DTM71Accident · No injuriesClosedGrumman G-164A · La Jara, CONTSB FTW76FQG81Accident · Serious injuriesClosedPiper PA-36 · Earth, TXNTSB CHI76FET40Accident · 1 fatalClosedBellanca 8KCAB · Galien, MINTSB MKC76AK061Accident · 1 fatalClosedCallair A-9 · Larimore, ND