Most comps attended in a single month
PersonCalendar-month explosion: how many comps a cuber attended within a single natural month (1st through month-end). GROUP BY person_id, YEAR(start_date), MONTHNAME(start_date) slices by month, plain COUNT.
Cutoff is 4 (HAVING ≥ 4) — roughly weekly cadence, already insane. The top sits around 6-8.
By the numbers
≥ 4
Cutoff
`HAVING attended_within_month >= 4`
自然月
Window
1st to month-end, year-bounded
DISTINCT
Dedup
Multi-event same comp → 1
Data source
results deduped on (competition_id, person_id) joined to competitions, grouped by (person, year, month) with COUNT. GROUP_CONCAT concatenates all comps that month as markdown links.
sql
SELECT COUNT(*) attended_within_month, person_id,
MONTHNAME(start_date) month_name,
YEAR(start_date) competitions_year,
GROUP_CONCAT(... competition cell_name ... ORDER BY start_date)
FROM (SELECT DISTINCT competition_id, person_id FROM results) r
JOIN competitions ON competitions.id = competition_id
GROUP BY person_id, YEAR(start_date), month_name
HAVING attended_within_month >= 4
ORDER BY attended_within_month DESCAlgorithm / pipeline
1
Dedup (person, comp)
Multi-event same comp collapses to one row —
DISTINCT competition_id, person_id subquery.2
Bucket by (person, year, month)
YEAR(start_date) + MONTHNAME(start_date) joint key prevents cross-year merging — "Jan 2024" vs "Jan 2025" are separate buckets.3
COUNT + cutoff
COUNT(*) per bucket; HAVING ≥ 4 trims normal cadence.4
Sort desc + show list
Sort by count desc, ties by name; attach
GROUP_CONCAT-built markdown links for inspection.Caveats & edges
- Calendar slice is laxer than "rolling 30 days" — Jun-30 + Jul-1 + Jul-2 is 3 consecutive days but gets split into two buckets (1 + 2).
- Comp
start_dateonly — multi-day spilling into the next month still counts under start month. - Doesn't capture summer→autumn→winter back-to-back streaks across the year — the weekly metric goes denser.