{"slug":"dollar-cost-averaging","qid":"assets","label":"Same $500-a-month plan vs a lump sum across five stocks, 2016 to 2026 ($ thousands)","post_title":"Does Dollar-Cost Averaging Work?","post_url":"/blog/dollar-cost-averaging#q-assets","columns":["ticker","dca_final","lumpsum_final"],"rows":[{"ticker":"MSFT","dca_final":199.4,"lumpsum_final":529.5},{"ticker":"QQQ","dca_final":203.3,"lumpsum_final":427},{"ticker":"SPY","dca_final":139.3,"lumpsum_final":237.7},{"ticker":"JNJ","dca_final":95.8,"lumpsum_final":140.1},{"ticker":"KO","dca_final":92.6,"lumpsum_final":116.8}],"shape":"ranking","sql":"WITH\nmonthly AS (\n    SELECT ticker, toStartOfMonth(dt) AS mo, argMin(c, dt) AS px\n    FROM (\n        SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS dt,\n               argMax(toFloat64(close), window_start) AS c\n        FROM global_markets.delayed_stocks_minute_aggs\n        WHERE ticker IN ('SPY', 'QQQ', 'MSFT', 'JNJ', 'KO')\n          AND window_start >= '2016-01-01 00:00:00' AND window_start < '2026-07-01 00:00:00'\n          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n               + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n        GROUP BY ticker, dt\n    )\n    GROUP BY ticker, mo\n)\nSELECT ticker,\n       round(sum(500.0 / px) * argMax(px, mo) / 1000, 1) AS dca_final,\n       round(sum(500.0) / argMin(px, mo) * argMax(px, mo) / 1000, 1) AS lumpsum_final\nFROM monthly\nGROUP BY ticker\nHAVING count() = 126\nORDER BY lumpsum_final DESC","computed_at":"2026-07-16T11:19:36.186157+00:00","elapsed":0.003343564}