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 CHI66A0085Accident · 2 fatalClosedLuscombe 8C · East St Louis, ILNTSB OAK66F0258Accident · No injuriesClosedBoeing A75 · Maxwell, CANTSB MIA66F0498Accident · Minor injuriesClosedCallair A-9 · Naples, FLNTSB FTW66D0625Accident · No injuriesClosedPiper PA-18 · Denison, TXNTSB DEN66A0073Accident · No injuriesClosedHughes 269A · Arvada, WYNTSB MIA66A0113Accident · 1 fatalClosedMonocoupe 110SPL · Arcadia, FLNTSB FTW66A0085Accident · 1 fatalClosedEmigh Acft A-2 · Freer, TXNTSB FTW67F0387Accident · Minor injuriesClosedBoeing A75N1 · Bay City, TXNTSB FTW66F0587Accident · No injuriesClosedBoeing B-75N1 · Taylortown, TXNTSB SEA66F0261Accident · Minor injuriesClosedTravelair 4000 · Albany, ORNTSB MIA66F0507Accident · No injuriesClosedPiper PA-28 · Hialeah, FLNTSB FTW66F0606Accident · Serious injuriesClosedPiper PA-25 · Guthrie, OKNTSB FTW66D0562Accident · No injuriesClosedPiper PA-25 · Belle Rose, LANTSB SEA66F0287Accident · Minor injuriesClosedStinson L-5 · Wasco, ORNTSB FTW66F0601Accident · No injuriesClosedPiper PA-18 · Waukomis, OKNTSB FTW66F0600Accident · No injuriesClosedCallair A-5 · Kingfisher, OKNTSB FTW66F0584Accident · No injuriesClosedPiper PA-25 · Okarche, OKNTSB DEN66D0278Accident · Minor injuriesClosedPiper J3C · Green River, UTNTSB FTW66F0599Accident · No injuriesClosedBeech A-23 · Amarillo, TXNTSB NYC66D0583Accident · No injuriesClosedPiper J3C · Bowie, MDNTSB NYC66F0673Accident · Minor injuriesClosedAeronca 7AC · Union, WVNTSB MIA66A0110Accident · Minor injuriesClosedAir Space 18A · Santa Isabel, PRNTSB LAX66A0071Accident · 1 fatalClosedBoeing A75 · Sunnymead, CANTSB FTW66A0081Accident · 1 fatalClosedPiper PA-18A · Electra, TXNTSB DEN66A0067Accident · 1 fatalClosedPitts Specl · Tucson, AZNTSB OAK66D0252Accident · No injuriesClosedBoeing E-75 · Tracy, CANTSB NYC66D0541Accident · No injuriesClosedCessna 150 · Whitesville, NJNTSB NYC66A0100Accident · 2 fatalClosedCessna 150 · Waltham, MANTSB MIA66D0464Accident · No injuriesClosedCessna 150F · Davie, FLNTSB DEN66D0261Accident · No injuriesClosedNavion B · Parker, AZNTSB MIA66A0106Accident · No injuriesClosedBell 47D1 · Shelby, MSNTSB LAX66A0066Accident · 2 fatalClosedPiper J5A · Mc Farland, CANTSB FTW66A0077Accident · 2 fatalClosedCessna 150 · Houston, TXNTSB DEN66D0281Accident · No injuriesClosedTaylorcraft BC12-D · Seely, WYNTSB FTW66F0572Accident · Minor injuriesClosedCessna 150E · Pearland, TXNTSB OAK66A0036Accident · Minor injuriesClosedBrantly B-2 · Sonoma, CANTSB NYC66A0094Accident · 4 fatalClosedMooney M20E · Patchogue, NYNTSB SEA66A0044Accident · Serious injuriesClosedHiller UH-12E · Heppner, ORNTSB OAK66F0195Accident · No injuriesClosedBoeing A-75 · Porterville, CANTSB FTW66D0523Accident · Minor injuriesClosedCessna 180 · Marble Falls, TXNTSB CHI66F0589Accident · No injuriesClosedCessna 150 · Winnebago, ILNTSB MIA66F0420Accident · No injuriesClosedCessna 150 · Lake Murray, SCNTSB UNK66X0122Accident · 1 fatalClosedCallair A-4 · San Miguel, RPNTSB SEA66F0230Accident · No injuriesClosedCessna 172 · Junction City, ORNTSB CHI66F0606Accident · Minor injuriesClosedCessna 150B · Millstadt, ILNTSB MKC66F0470Accident · No injuriesClosedPiper PA-28 · Nixa, MONTSB LAX66F0244Accident · No injuriesClosedPiper PA-28 · Santa Barbra, CANTSB LAX66A0062Accident · 1 fatalClosedPiper PA-18 · Empire, NVNTSB MKC66F0457Accident · Serious injuriesClosedPiper PA-11 · Hurdsfield, NDNTSB SEA66A0042Accident · 2 fatalClosedPiper PA-24 · Osburn, ID