Как посчитать Runway в SQL
SELECT user_id FROM users LIMIT 10, если в нём нет ORDER BY?Содержание:
Зачем Runway
В стартапе runway — это секундомер. Если осталось 4 месяца, то через 4 месяца компания закроется, если ничего не предпринять. Знать runway надо постоянно и не позже чем за 6 месяцев до нового раунда инвестиций.
Что такое Runway
Runway — сколько месяцев компания протянет при текущем запасе денег и темпе их расходования (burn rate).
Runway (months) = Current Cash / Average Monthly Net BurnБазовый расчёт
WITH latest AS (
SELECT cash_balance, month FROM cash_flow ORDER BY month DESC LIMIT 1
),
burn AS (
SELECT AVG(expenses - revenue) AS avg_net_burn
FROM cash_flow
WHERE month >= (SELECT month FROM latest) - INTERVAL '3 months'
AND month <= (SELECT month FROM latest)
)
SELECT
l.cash_balance,
b.avg_net_burn,
l.cash_balance::NUMERIC / NULLIF(b.avg_net_burn, 0) AS runway_months
FROM latest l
CROSS JOIN burn b;Анализ чувствительности
«Что если burn вырастет на 20%? Что если выручка вырастет на 50%?»
WITH latest AS (
SELECT cash_balance FROM cash_flow ORDER BY month DESC LIMIT 1
),
burn AS (
SELECT
AVG(expenses) AS avg_expenses,
AVG(revenue) AS avg_revenue
FROM cash_flow
WHERE month >= CURRENT_DATE - INTERVAL '3 months'
)
SELECT
'baseline' AS scenario,
l.cash_balance,
b.avg_expenses - b.avg_revenue AS net_burn,
l.cash_balance::NUMERIC / NULLIF(b.avg_expenses - b.avg_revenue, 0) AS runway
FROM latest l, burn b
UNION ALL
SELECT
'expenses +20%',
l.cash_balance,
b.avg_expenses * 1.2 - b.avg_revenue,
l.cash_balance::NUMERIC / NULLIF(b.avg_expenses * 1.2 - b.avg_revenue, 0)
FROM latest l, burn b
UNION ALL
SELECT
'revenue +50%',
l.cash_balance,
b.avg_expenses - b.avg_revenue * 1.5,
l.cash_balance::NUMERIC / NULLIF(b.avg_expenses - b.avg_revenue * 1.5, 0)
FROM latest l, burn b;Прогноз Runway
Если ожидаете изменения денежного потока:
WITH forecast AS (
SELECT * FROM (VALUES
('2026-05-01'::DATE, -300000, 50000),
('2026-06-01'::DATE, -310000, 60000),
('2026-07-01'::DATE, -320000, 80000),
('2026-08-01'::DATE, -330000, 100000)
) AS f(month, expenses, revenue)
),
running_cash AS (
SELECT
month,
expenses + revenue AS monthly_delta,
SUM(expenses + revenue) OVER (ORDER BY month) AS cumulative_change
FROM forecast
)
SELECT
month,
monthly_delta,
(SELECT cash_balance FROM cash_flow ORDER BY month DESC LIMIT 1) + cumulative_change AS projected_cash
FROM running_cash
ORDER BY month;Когда projected_cash < 0 — runway закончилось.
Частые ошибки
Ошибка 1. Burn за один месяц. Декабрьский burn был высоким (бонусы), январский — низким. Не считайте runway по одиночным месяцам.
Ошибка 2. Не учитывать рост. Если выручка растёт на +20% MoM, runway со временем удлиняется. Линейный расчёт его занижает.
Ошибка 3. Забыть про плановые выплаты. Через 3 месяца плановая выплата $500K (аренда, налоги, выплаты инвесторам). Включите её в прогноз.
Ошибка 4. Деньги против доступных денег. На счету $5M, но $2M из них заморожены (например, на эскроу). Реально доступно только $3M.
Ошибка 5. Игнорировать сезонность. Сезонная выручка (когда на Q4 приходится 70% годовой) искажает среднее.
Связанные темы
- Как посчитать burn rate в SQL
- Как посчитать MRR в SQL
- Как посчитать revenue в SQL
- Как посчитать unit-economics в SQL
FAQ
Какой Runway считается нормальным?
Перед раундом стоит иметь минимум 12 месяцев. 18-24 месяца — комфортно, а меньше 6 — уже критично.
Runway 24 месяца — повод расслабиться?
Нет. Привлечение раунда занимает 6-12 месяцев, поэтому начинать нужно минимум за 12 месяцев до того, как деньги закончатся.
Runway отрицательный — что значит?
Это значит, что net burn положителен: вы зарабатываете больше, чем тратите, и запас денег растёт. Runway в этом случае бесконечен, то есть метрика неприменима.
Прогноз или исторические данные?
Прогноз нужен для планирования, а исторические данные — чтобы оценить текущее состояние. Используйте оба подхода.
Runway упал на 30% — что делать?
Сначала понять причину: выросли расходы или упала выручка. И уже по ней резать соответствующую статью.