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 ATL80FLG17Accident · No injuriesClosedAir Tractor AT-301 · Ehrhardt, SCNTSB ATL80FLA06Accident · No injuriesClosedTom Cat MK-5A · Quitman, GANTSB ANC80DAG95Accident · No injuriesClosedCessna 170B · Palmer, AKNTSB FTW80DRG64Accident · No injuriesClosedBell 47G4A · Mathis, TXNTSB FTW80DPG59Accident · Minor injuriesClosedSnow S2R · Cherry Valley, ARNTSB DEN80FTE69Accident · 1 fatalClosedPiper PA-25 · Mosca, CONTSB FTW80FRD55Accident · Minor injuriesClosedPiper PA-25 · Plaquemine, LANTSB FTW80FA102Accident · 2 fatalClosedCessna 150H · Jonesboro, ARNTSB CHI80FA063Accident · 2 fatalClosedCessna 172 · Bois Blanc Is, MINTSB MKC80DCJ28Accident · No injuriesClosedGrumman G-164B · Cambridge, NENTSB FTW80FQG37Accident · No injuriesClosedPiper PA-36 · Kress, TXNTSB CHI81FEI35Accident · Serious injuriesClosedSpeziosport DAL-1 · Tiffin, OHNTSB ATL80FA083Accident · 1 fatalClosedCessna 150 · Henderson, KYNTSB ATL80DIA13Accident · No injuriesClosedBellanca 8KCAB · Washington, VANTSB MKC80DCJ27Accident · No injuriesClosedCessna A188B · Axtell, NENTSB ATL80FA082Accident · 1 fatalClosedCessna 150 · Oswego, SCNTSB ATL80DKJ25Accident · Minor injuriesClosedGrumman G-164 · Cherokee, ALNTSB FTW80FPG57Accident · Serious injuriesClosedPiper PA-25 · Humphrey, ARNTSB MIA80FLD75Accident · Serious injuriesClosedPiper PA-24 · Okeechobee, FLNTSB MKC80DCJ24Accident · No injuriesClosedPiper PA-25 · Overton, NENTSB LAX80FUJ92Accident · No injuriesClosedRockwell 600S2R · Buckeye, AZNTSB FTW80DPG56Accident · No injuriesClosedCessna 188 · Bradley, ARNTSB CHI80FEV31Accident · No injuriesClosedGrumman 164B · Maroa, ILNTSB FTW80FQG35Accident · 1 fatalClosedPiper PA-25 · Dumas, TXNTSB DEN80FTM35Accident · No injuriesClosedBeech A-36 · America Fork, UTNTSB FTW80DQG34Accident · No injuriesClosedAero Comdr S-2R · Friona, TXNTSB CHI80DER62Accident · No injuriesClosedGrumman G-164B · E.Grand Forks, MNNTSB LAX80DUJ91Accident · No injuriesClosedHiller Acft UH-12E · Sommerton, AZNTSB MIA80FA086Accident · 2 fatalClosedCessna 404 · Ft White, FLNTSB ATL80FA080Accident · No injuriesClosedGrumman G-164A · Samson, ALNTSB ATL80DKJ20Accident · No injuriesClosedHughes 269B · Decatur, ALNTSB MKC80FCQ25Accident · 1 fatalClosedPiper PA-25 · Garden City, KSNTSB FTW80DQD14Accident · No injuriesClosedCallair B1A · Deming, NMNTSB FTW80FPM15Accident · Serious injuriesClosedAngel SPL · Wagoner, OKNTSB LAX80FVA56Accident · No injuriesClosedHiller Acft UH-12E · Farmersville, CANTSB CHI80FER60Accident · 1 fatalClosedCassutt · Winona, MNNTSB ATL80FKG16Accident · Serious injuriesClosedPiper PA-25 · Unadilla, GANTSB LAX80FUJ83Accident · Minor injuriesClosedBell 47G-5 · Sommerton, AZNTSB LAX80FA126Accident · 1 fatalClosedCessna 310 · Tracy, CANTSB FTW80DPG53Accident · No injuriesClosedAyres S2R · Winchester, ARNTSB NYC80FNC34Accident · Minor injuriesClosedPiper PA-25 · Franklin, MENTSB MKC80FCD23Accident · No injuriesClosedPiper PA-25 · Sprignville, IANTSB DEN80FTK18Accident · Serious injuriesClosedPiper PA-25 · Tulare, SDNTSB ATL80FA077Accident · 1 fatalClosedBellanca 8GCBC · Banks, MSNTSB LAX80FVA55Accident · Serious injuriesClosedCessna 182P · Olancha, CANTSB MKC80FA047Accident · 1 fatalClosedPitts S1 · Centerville, IANTSB CHI80FEC25Accident · Serious injuriesClosedBell 47D1 · Milan, MINTSB FTW80DPG49Accident · No injuriesClosedPiper PA-25 · Grady, ARNTSB CHI80FET21Accident · 1 fatalClosedFaulkner MS-1 · Ft Wayne, INNTSB NYC80FNE23Accident · Serious injuriesClosedCessna 152 · Berlin, CT