NTSB investigations
18,850 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 LAX70FUQ19Accident · Minor injuriesClosedAero Comdr A-9B · Filmore, CANTSB DEN70FQA12Accident · Serious injuriesClosedCessna U206 · Ruidoso, NMNTSB MIA70FLD14Accident · No injuriesClosedSnow S2D600 · Sebastin, FLNTSB MIA70FLD13Accident · No injuriesClosedBell 47D1 · Nocatee, FLNTSB MIA70FLA13Accident · 1 fatalClosedPiper PA-25 · St.Augustine, FLNTSB FTW70FPA09Accident · Minor injuriesClosedPiper J3C-65 · Mexia, TXNTSB CHI70AC064Accident · 2 fatalClosedCessna 150J · Brighton, ILNTSB OAK70AP047Accident · 2 fatalClosedPiper J-3 · Red Bluff, CANTSB DEN70DXA06Accident · No injuriesClosedBell 47G · Casper, WYNTSB OAK70DVM09Accident · Minor injuriesClosedHiller Acft UH-12C · Castroville, CANTSB IAD70FIG09Accident · Minor injuriesClosedCessna 150G · Hagerstown, MDNTSB NYC70AN100Accident · 2 fatalClosedCessna 172A · N.Branford, CTNTSB FTW70DRG21Accident · No injuriesClosedPiper PA-25 · Raymondville, TXNTSB OAK70DVM08Accident · No injuriesClosedPiper PA-18 · Shandon, CANTSB FTW70FPJ08Accident · No injuriesClosedBellanca 14-13 · Enid, OKNTSB NYC70FHJ03Accident · No injuriesClosedBrantly B-2 · Lindenhurst, NYNTSB NYC70FHD09Accident · 1 fatalClosedBensen B-8M · Bridgeton, NJNTSB LAX70FUJ14Accident · Minor injuriesClosedCessna 150G · Mesa, AZNTSB OAK70DVM04Accident · Minor injuriesClosedBell 47G-2 · Greenfield, CANTSB FTW70DRG13Accident · Minor injuriesClosedBell 47G-4A · Corpus Chrsti, TXNTSB SEA70FWG02Accident · No injuriesClosedHiller Acft UH-12E · Colfax, WANTSB MKC70DDQ05Accident · No injuriesClosedCessna 172K · Isabel, SDNTSB MKC70AK045Accident · 1 fatalClosedCessna 172 · Muscatine, IANTSB DEN70AD047Accident · 1 fatalClosedErco 415-C · Akron, CONTSB OAK70DVA06Accident · No injuriesClosedBell 47G-2 · Los Banos, CANTSB OAK70AP044Accident · 1 fatalClosedPiper PA-22 · Clovis, CANTSB MKC70DCA02Accident · Minor injuriesClosedPiper PA-16 · Bonne Terre, MONTSB OAK70FVF03Accident · Minor injuriesClosedBoeing A75N1 · Arbuckle, CANTSB MIA70AM064Accident · 1 fatalClosedLuscombe 8A · Brookfield, GANTSB MKC70DCD11Accident · No injuriesClosedCessna 150J · Riverside, IANTSB MKC70DDD05Accident · No injuriesClosedPiper PA-18 · Noonan, NDNTSB OAK70FJA02Accident · 2 fatalClosedCessna 150H · Kaunakakai, HINTSB NYC70FFG01Accident · Serious injuriesClosedTaylorcraft BL-12 · West Paris, MENTSB LAX70FUM02Accident · Minor injuriesClosedAero Comdr 600S2D · Westmorelnd, CANTSB NYC70DFA02Accident · No injuriesClosedPiper PA-18 · Lawrenceville, NYNTSB CHI70DDJ03Accident · No injuriesClosedCessna 170A · Prairie Du Sc, WINTSB MKC70A0036Accident · 2 fatalClosedCessna 180 · Pierce, NENTSB MIA70A0050Accident · 2 fatalClosedPiper PA-18 · Belzoni, MSNTSB ANC70D0084Accident · Minor injuriesClosedPiper PA-20 · Skwentna, AKNTSB NYC70D0228Accident · No injuriesClosedCessna 120 · Hancocks Brdge, NJNTSB CHI70F0387Accident · Serious injuriesClosedCessna 150 · Lebanon, KYNTSB LAX70F0215Accident · Serious injuriesClosedTaylorcraft BC12-D · Lamont, CANTSB MIA70F0241Accident · Serious injuriesClosedAeronca 0-58B · Conasauga, TNNTSB MKC70A0029Accident · 1 fatalClosedChampion 7ECA · Royal, IANTSB MKC70F0278Accident · Serious injuriesClosedAeronca 7AC · Harlan, IANTSB OAK70F0181Accident · 1 fatalClosedPiper PA-18A · Maxwell, CANTSB MIA70A0040Accident · 2 fatalClosedChampion 7FC · Midville, GANTSB OAK70D0180Accident · No injuriesClosedCessna 150 · Los Banos, CANTSB IAD70D0110Accident · No injuriesClosedChampion 7KCAB · Churchton, MDNTSB LAX70D0202Accident · No injuriesClosedCessna 172 · Newhall, CA