STRASMORE/EXPLORE 2,948 QUERIES

pop_by_year

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-10-02, from what-is-gmp-in-an-ipo.

as of ranking 6×4read in context →
pop_by_year — 6 rows by 4 columns, computed from US exchange, SIP and OPRA data.
listing_yearlisting_countmedian_pop_pctbelow_offer_pct
20215197.517.5
20228611.722.1
202311423.816.7
202417612.221.6
20252349.617.9
2026902.427.8
Rows × columns
6 × 4
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for pop_by_year, derived from the stored result.
ColumnTypeRangeNotes
listing_year text 6 distinct values (2021, 2022, 2023…)
listing_count number 86 to 519 count
median_pop_pct number 2.4 to 23.8 percent
below_offer_pct number 16.7 to 27.8 percent

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

WITH issues AS
(
    SELECT
        ticker,
        min(listing_date)                 AS listing_dt,
        max(toFloat64(final_issue_price)) AS offer_price
    FROM global_markets.stocks_ipos
    WHERE listing_date >= '2021-01-01'
      AND listing_date <  '2026-07-01'
      AND final_issue_price > 0
      AND issuer_name NOT ILIKE '%acquisition%'
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
),
debut AS
(
    SELECT
        i.ticker                                                                AS ticker,
        toString(toYear(i.listing_dt))                                          AS listing_year,
        round(100 * (argMin(toFloat64(d.open), d.date) / i.offer_price - 1), 2)  AS pop_pct
    FROM issues AS i
    INNER JOIN global_markets.stocks_daily_aggs AS d ON d.ticker = i.ticker
    WHERE d.date >= i.listing_dt
      AND d.date <  i.listing_dt + 7
    GROUP BY i.ticker, i.offer_price, i.listing_dt
)
SELECT
    listing_year,
    count()                                                                     AS listing_count,
    round(quantileDeterministic(0.5)(pop_pct, toUInt32(cityHash64(ticker))), 1) AS median_pop_pct,
    round(100 * countIf(pop_pct < 0) / count(), 1)                              AS below_offer_pct
FROM debut
WHERE isFinite(pop_pct)
GROUP BY listing_year
HAVING count() >= 5
ORDER BY listing_year
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

More from this analysiswhat-is-gmp-in-an-ipo
pop_spread ranking 6×3 → debut_two_legs table 4×5 → Top 25 weekly-options underlyings by distinct contracts traded, with expiration weekdays ranking 25×4 → Annualized volatility vs total return, 25 large caps, calmest to wildest (~2 years) ranking 25×3 → SPY options median spread by expiration date, near-the-money strikes only ranking 25×4 → Stock headlines by ET hour of publication (last 30 days, all days) ranking 24×3 → See all 2,948 queries →