NTSB investigations
20,992 cases where the phase of flight was Approach.
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 = 500)
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 = 500)
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 CHI74FEE49Accident · Serious injuriesClosedCessna 210G · Wheeling, ILNTSB CHI74AC061Accident · 2 fatalClosedBeech V35A · Akron, OHNTSB NYC74FFJ21Accident · Serious injuriesClosedCessna 180 · Niagara Falls, NYNTSB NYC74FFJ20Accident · Serious injuriesClosedPiper PA-30 · Ithaca, NYNTSB MKC74FGA18Accident · No injuriesClosedPiper PA-32 · Jefferson City, MONTSB MKC74DCA20Accident · Minor injuriesClosedErco 415-C · Sikeston, MONTSB IAD74II039Incident · No injuriesClosedCessna 310G · Manteo, NCNTSB FTW74FRG50Accident · Serious injuriesClosedPiper J-3 · Cibolo, TXNTSB FTW74DRG49Accident · No injuriesClosedPiper PA-24 · Quihi, TXNTSB MIA74DKJ42Accident · No injuriesClosedAero Comdr 680T · Montgomery, ALNTSB FTW74AF055Accident · 2 fatalClosedN.American NA-265 · Oklahoma Cty, OKNTSB MIA74DKJ44Accident · No injuriesClosedPiper PA-30 · Decatur, ALNTSB DEN74AD033Accident · Serious injuriesClosedConvair 580 · Cheyenne, WYNTSB OAK74FJA13Accident · No injuriesClosedBeech 19A · Lahaina, HINTSB MIA74AM057Accident · No injuriesClosedLockheed 18-56 · Placida, FLNTSB FTW74FQG37Accident · No injuriesClosedCessna 340 · Midland, TXNTSB DEN74DTE44Accident · No injuriesClosedAeronca 7BCM · Arboles, CONTSB SEA74DYC34Accident · Minor injuriesClosedStinson 108-1 · Wilsonville, ORNTSB NYC74AN063Accident · 1 fatalClosedPiper PA-28R · Jackson, MSNTSB MIA74FKJ41Accident · Serious injuriesClosedAeronca 7FC · Addison, ALNTSB IAD74DLQ22Accident · No injuriesClosedBeech 19 · Falmouth, KYNTSB LAX74DUG35Accident · No injuriesClosedAmer Avco AA-1B · El Monte, CANTSB ANC77FM028Accident · 12 fatalClosedBeech 99A · Johnstown, PANTSB NYC74FGT14Accident · No injuriesClosedCessna 182 · New Cumberland, PANTSB NYC74FGM13Accident · No injuriesClosedPiper PA-28 · Jeannette, PANTSB MKC74DER34Accident · No injuriesClosedPiper PA-28 · Silver Bay, MNNTSB NYC74IN062Incident · No injuriesClosedDouglas DC-8 · Columbia, SCNTSB DEN74FTE39Accident · No injuriesClosedAero Comdr 680 · Denver, CONTSB MIA74AM053Accident · 2 fatalClosedPiper PA-30 · Charleston, SCNTSB SEA74DYG22Accident · No injuriesClosedPiper PA-28 · Richland, WANTSB ANC74FAA23Accident · Minor injuriesClosedCessna 180 · Ft.Yukon, AKNTSB ANC74DAG83Accident · Minor injuriesClosedPiper PA-12 · Anchorage, AKNTSB SEA74AS027Accident · 1 fatalClosedPiper PA-31 · Walla Walla, WANTSB FTW74AF047Accident · 1 fatalClosedBeech C-45H · Dallas, TXNTSB IAD74DKW21Accident · No injuriesClosedLuscombe 8A · Morristown, TNNTSB NYC74FHA22Accident · Minor injuriesClosedPiper PA-23 · Reading, PANTSB NYC74AN058Accident · 2 fatalClosedCessna 177RG · Dravosburg, PANTSB NYC74AN056Accident · 2 fatalClosedBeech 95-B55 · Colonie, NYNTSB MIA74AM049Accident · 2 fatalClosedBeech C90 · W Columbia, SCNTSB FTW74AF045Accident · Serious injuriesClosedBeech C-45H · Waco, TXNTSB OAK74DXQ18Accident · No injuriesClosedCessna 150 · Chester, CANTSB MKC74AK033Accident · 2 fatalClosedCessna 310L · Manhattan, KSNTSB DCA74AZ014Accident · Serious injuriesClosedDouglas DC-10 · Boston, MANTSB MKC74FER26Accident · Serious injuriesClosedPiper PA-28 · Rochester, MNNTSB NYC74AN053Accident · Serious injuriesClosedStinson 108-1 · Amityville, NYNTSB CHI74FEV30Accident · Serious injuriesClosedCessna P206 · Macomb, ILNTSB NYC74FGM12Accident · No injuriesClosedErco 415-C · West Middlesex, PANTSB CHI74DEP24Accident · No injuriesClosedCessna 150 · Crivitz, WINTSB CHI74FEK09Accident · No injuriesClosedAero Comdr 500B · Findly, OHNTSB CHI74DET15Accident · No injuriesClosedBeech A35 · Logansport, IN