Skip to content

One Big Month Is About to Send Your Forecast the Wrong Way (8 Lines of SQL to Prevent It)

    Same business, same table, two different meetings. In one, this month’s booking total looks healthy. In another, weak. Use a single number to forecast, staff, or spend, and you’re deciding from a snapshot.

    Time is the missing dimension. A total says how much happened. It doesn’t say whether the pattern is steady, seasonal, or changing.

    The Heartrate Monitor Blueprint is how you find the rhythm. I ran it against the live booking data for Summit Adventures, the fake adventure tourism company I created to help people learn business analytics.

    Build the timeline in three passes

    1. Pick a time unit that fits the decision. Monthly totals help with planning. Daily totals are usually too noisy.
    2. Pair volume with value. Count bookings and sum booked value together so you can see whether activity and money move in step.
    3. Read the neighboring months. A high month means little on its own. The months around it tell you whether it’s a spike, a trend, or incomplete history.

    SELECT
        DATE_TRUNC('month', booking_date)::date AS booking_month,
        COUNT(*) AS bookings,
        SUM(total_amount) AS booked_value
    FROM bookings
    GROUP BY DATE_TRUNC('month', booking_date)::date
    ORDER BY booking_month;

    Results:

    | Booking month | Bookings | Booked value |
    | — | —: | —: |
    | August 2024 | 51 | $118,871.44 |
    | December 2024 | 109 | $281,770.01 |
    | January 2025 | 120 | $298,902.08 |
    | March 2025 | 175 | $440,826.89 |
    | June 2025 | 150 | $336,611.50 |
    | September 2025 | 45 | $114,334.46 |
    | October 2025 | 23 | $34,115.62 |

    This is an uneven history. Not enough evidence to declare a seasonal pattern. Bookings climb from 51 in August 2024 to 175 in March 2025, then fall sharply through the second half of 2025.

    The gaps raise better follow-up questions:

    Is the history incomplete?
    Does Summit have a seasonal booking cycle?
    Did a campaign change demand?

    The query surfaces those questions. It won’t answer them. Before anyone asks for a forecast, budget, or staffing plan, a view like this gives the team a baseline to verify.

    Three ways a trend line can fool you

    Incomplete history looks like seasonality. Confirm the dataset has every month you’d expect before explaining a rise or fall.
    Booking date isn’t travel date. Use the date tied to the decision: booking, departure, invoice, or payment.
    A total can hide a mix change. A high-value month might come from more bookings, more expensive trips, or both.

    Don’t forecast from one monthly total

    Resist calling a high month a win right away. A few checks first:

    1. Compare it with the months around it.
    2. Check whether booking volume and booked value rise together.
    3. Ask whether a low month means less demand, less availability, or just missing records.

    For Summit, the March peak is worth a follow-up query by expedition type and booking source. That would tell the team whether the lift was broad or concentrated in one product.

    The same pattern works for sales, website traffic, support requests, invoices, applications, subscriptions. Start with a calendar unit that fits the decision:

    Monthly: planning and forecasts.
    Weekly: campaigns.
    Daily: operations.

    This Week’s Action Item

    Choose one timestamp column in your data. Group records by month, count them, and add the money or outcome metric that matters most. Write down one pattern you see and one question you need answered before acting on it.


    Want More SQL Insights Like This?

    Join thousands of analysts getting weekly tips on turning data into business impact.

    Subscribe to Analytics in Action →

    Leave a Reply

    Your email address will not be published. Required fields are marked *