baz9

Badges

100 Contributions1,000 Contributions10 Posts

Contributions

Posts

1 Day

0

7 Days

18

4 Weeks

34

All Time

6441

Current Streak

0

Longest Streak

13

Contributions Map

Contributions by Country

Country Contributions Between Climbers Crags Summits Climbs Ascents
1 USA 1507 20th November 2025 – 30th June 2026 47 20 0 87 97
2 Australia 767 27th September 2025 – 29th June 2026 6 38 0 61 33
3 United Kingdom 576 19th November 2025 – 8th July 2026 33 14 0 22 43
4 France 264 6th January 2026 – 28th June 2026 14 3 0 12 31
5 Switzerland 257 24th January 2026 – 10th July 2026 6 3 0 12 33
6 Austria 210 12th November 2025 – 22nd June 2026 5 2 0 8 22
7 Italy 129 18th November 2025 – 29th May 2026 9 3 0 11 10
8 Pakistan 118 11th April 2026 – 26th April 2026 0 0 0 1 7
9 Spain 105 20th February 2026 – 16th May 2026 5 0 0 10 11
10 Germany 103 3rd February 2026 – 26th June 2026 7 0 0 7 10

Recent Contributions

Date Time User Type Name Attribute
4581 24th March 2026 00:50:55 UTC baz9 list Youngest Ascents (with date ranges) list_name
Before
None
After
Youngest Ascents (with date ranges)
4582 24th March 2026 00:27:12 UTC baz9 list Oldest Ascents (with date ranges) list_description
Before
Main list here: [https://climbing-history.org/list/82/oldest-ascents](https://climbing-history.org/list/82/oldest-ascents) The above list will only show an ascent where we can calculate a climbers exact age at time of ascent. This list instead calculates the range of possible ages and sorts based on the climbers minimum possible age based on the data we have. Ideally we want to source the exact info for the ascents listed here.
After
Main list here: [https://climbing-history.org/list/82/oldest-ascents](https://climbing-history.org/list/82/oldest-ascents) The above list will only show an ascent where we can calculate a climbers exact age at time of ascent. This list instead calculates the range of possible ages and sorts based on the climbers minimum possible age based on the data we have. Ideally we want to source the exact dates for the ascents listed here.
Diff
--- before

+++ after

@@ -1,3 +1,3 @@

Main list here: [https://climbing-history.org/list/82/oldest-ascents](https://climbing-history.org/list/82/oldest-ascents)

-The above list will only show an ascent where we can calculate a climbers exact age at time of ascent. This list instead calculates the range of possible ages and sorts based on the climbers minimum possible age based on the data we have. Ideally we want to source the exact info for the ascents listed here.
+The above list will only show an ascent where we can calculate a climbers exact age at time of ascent. This list instead calculates the range of possible ages and sorts based on the climbers minimum possible age based on the data we have. Ideally we want to source the exact dates for the ascents listed here.
4583 24th March 2026 00:27:12 UTC baz9 list Oldest Ascents (with date ranges) list_description_pretty
Before
<p>Main list here: <a href="https://climbing-history.org/list/82/oldest-ascents" rel="noopener noreferrer">https://climbing-history.org/list/82/oldest-ascents</a></p> <p>The above list will only show an ascent where we can calculate a climbers exact age at time of ascent. This list instead calculates the range of possible ages and sorts based on the climbers minimum possible age based on the data we have. Ideally we want to source the exact info for the ascents listed here.</p>
After
<p>Main list here: <a href="https://climbing-history.org/list/82/oldest-ascents" rel="noopener noreferrer">https://climbing-history.org/list/82/oldest-ascents</a></p> <p>The above list will only show an ascent where we can calculate a climbers exact age at time of ascent. This list instead calculates the range of possible ages and sorts based on the climbers minimum possible age based on the data we have. Ideally we want to source the exact dates for the ascents listed here.</p>
4584 24th March 2026 00:26:56 UTC baz9 list Oldest Ascents (with date ranges) list_description_pretty
Before
<p>See also <a href="https://climbing-history.org/list/82/oldest-ascents" rel="noopener noreferrer">https://climbing-history.org/list/82/oldest-ascents</a></p> <p>This is a list of the oldest ascents at each grade.</p>
After
<p>Main list here: <a href="https://climbing-history.org/list/82/oldest-ascents" rel="noopener noreferrer">https://climbing-history.org/list/82/oldest-ascents</a></p> <p>The above list will only show an ascent where we can calculate a climbers exact age at time of ascent. This list instead calculates the range of possible ages and sorts based on the climbers minimum possible age based on the data we have. Ideally we want to source the exact info for the ascents listed here.</p>
4585 24th March 2026 00:26:56 UTC baz9 list Oldest Ascents (with date ranges) list_description
Before
See also [https://climbing-history.org/list/82/oldest-ascents](https://climbing-history.org/list/82/oldest-ascents) This is a list of the oldest ascents at each grade.
After
Main list here: [https://climbing-history.org/list/82/oldest-ascents](https://climbing-history.org/list/82/oldest-ascents) The above list will only show an ascent where we can calculate a climbers exact age at time of ascent. This list instead calculates the range of possible ages and sorts based on the climbers minimum possible age based on the data we have. Ideally we want to source the exact info for the ascents listed here.
Diff
--- before

+++ after

@@ -1,3 +1,3 @@

-See also [https://climbing-history.org/list/82/oldest-ascents](https://climbing-history.org/list/82/oldest-ascents)
+Main list here: [https://climbing-history.org/list/82/oldest-ascents](https://climbing-history.org/list/82/oldest-ascents)

-This is a list of the oldest ascents at each grade.
+The above list will only show an ascent where we can calculate a climbers exact age at time of ascent. This list instead calculates the range of possible ages and sorts based on the climbers minimum possible age based on the data we have. Ideally we want to source the exact info for the ascents listed here.
4586 24th March 2026 00:21:41 UTC baz9 list Oldest Ascents (with date ranges) list_description
Before
This is a list of the oldest ascents at each grade.
After
See also [https://climbing-history.org/list/82/oldest-ascents](https://climbing-history.org/list/82/oldest-ascents) This is a list of the oldest ascents at each grade.
Diff
--- before

+++ after

@@ -1 +1,3 @@

+See also [https://climbing-history.org/list/82/oldest-ascents](https://climbing-history.org/list/82/oldest-ascents)
+
This is a list of the oldest ascents at each grade.
4587 24th March 2026 00:21:41 UTC baz9 list Oldest Ascents (with date ranges) list_description_pretty
Before
<p>This is a list of the oldest ascents at each grade.</p>
After
<p>See also <a href="https://climbing-history.org/list/82/oldest-ascents" rel="noopener noreferrer">https://climbing-history.org/list/82/oldest-ascents</a></p> <p>This is a list of the oldest ascents at each grade.</p>
4588 24th March 2026 00:17:50 UTC baz9 list Oldest Ascents (with date ranges) list_definition
Before
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,a.ascent_dt_end ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_end - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_end, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null and a.ascent_dt_end is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Minimum Age (Days)" ,case when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days' else o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_end - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' end as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
After
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,a.ascent_dt_end ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_end - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_end, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null and a.ascent_dt_end is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Minimum age (days)" ,case when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days' else o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_end - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' end as "Age" ,case when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then '' else '✓' end as "Dates Needed" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
Diff
--- before

+++ after

@@ -65,7 +65,7 @@

o.grade
,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber"
,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb"
- ,o.min_age_in_days_at_ascent as "Minimum Age (Days)"
+ ,o.min_age_in_days_at_ascent as "Minimum age (days)"
,case
when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then
o.min_age_in_years_at_ascent || ' years ' ||
@@ -79,6 +79,10 @@

extract(days from o.ascent_dt_end - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) ||
' days'
end as "Age"
+ ,case
+ when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then ''
+ else '✓'
+ end as "Dates Needed"

from
oldest o
4589 24th March 2026 00:14:28 UTC baz9 list Oldest Ascents (with date ranges) list_definition
Before
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,a.ascent_dt_end ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_end - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_end, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null and a.ascent_dt_end is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Age (Days)" ,case when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days' else o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_end - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' end as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
After
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,a.ascent_dt_end ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_end - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_end, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null and a.ascent_dt_end is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Minimum Age (Days)" ,case when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days' else o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_end - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' end as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
Diff
--- before

+++ after

@@ -65,7 +65,7 @@

o.grade
,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber"
,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb"
- ,o.min_age_in_days_at_ascent as "Age (Days)"
+ ,o.min_age_in_days_at_ascent as "Minimum Age (Days)"
,case
when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then
o.min_age_in_years_at_ascent || ' years ' ||
4590 24th March 2026 00:12:35 UTC baz9 list Oldest Ascents (with date ranges) list_definition
Before
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_start - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Age (Days)" ,case when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days' else o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' end as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
After
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,a.ascent_dt_end ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_end - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_end, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null and a.ascent_dt_end is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Age (Days)" ,case when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days' else o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_end - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' end as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
Diff
--- before

+++ after

@@ -28,12 +28,13 @@

,g.order_on
,g.grade
,a.ascent_dt_start
+ ,a.ascent_dt_end
,c.date_of_birth_start
,c.date_of_birth_end
,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent
- ,a.ascent_dt_start - c.date_of_birth_start as max_age_in_days_at_ascent
+ ,a.ascent_dt_end - c.date_of_birth_start as max_age_in_days_at_ascent
,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent
- ,extract(year from age(a.ascent_dt_start, c.date_of_birth_start))::integer as max_age_in_years_at_ascent
+ ,extract(year from age(a.ascent_dt_end, c.date_of_birth_start))::integer as max_age_in_years_at_ascent

from
ascents a
@@ -48,6 +49,7 @@


where
a.ascent_dt_start is not null
+ and a.ascent_dt_end is not null
), oldest as (
select
*
@@ -74,7 +76,7 @@

extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) ||
' days to ' ||
o.max_age_in_years_at_ascent || ' years ' ||
- extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) ||
+ extract(days from o.ascent_dt_end - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) ||
' days'
end as "Age"
4591 24th March 2026 00:08:11 UTC baz9 list Oldest Ascents (with date ranges) list_definition
Before
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_start - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Age (Days)" ,case when o.date_of_birth_start = o.date_of_birth_end then o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days' else o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' end as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
After
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_start - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Age (Days)" ,case when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days' else o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' end as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
Diff
--- before

+++ after

@@ -65,7 +65,7 @@

,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb"
,o.min_age_in_days_at_ascent as "Age (Days)"
,case
- when o.date_of_birth_start = o.date_of_birth_end then
+ when o.min_age_in_days_at_ascent = o.max_age_in_days_at_ascent then
o.min_age_in_years_at_ascent || ' years ' ||
extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) ||
' days'
4592 23rd March 2026 23:59:58 UTC baz9 list Oldest Ascents (with date ranges) list_definition
Before
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_start - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Age (Days)" ,o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
After
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_start - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Age (Days)" ,case when o.date_of_birth_start = o.date_of_birth_end then o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days' else o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' end as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
Diff
--- before

+++ after

@@ -64,12 +64,19 @@

,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber"
,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb"
,o.min_age_in_days_at_ascent as "Age (Days)"
- ,o.min_age_in_years_at_ascent || ' years ' ||
- extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) ||
- ' days to ' ||
- o.max_age_in_years_at_ascent || ' years ' ||
- extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) ||
- ' days' as "Age"
+ ,case
+ when o.date_of_birth_start = o.date_of_birth_end then
+ o.min_age_in_years_at_ascent || ' years ' ||
+ extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) ||
+ ' days'
+ else
+ o.min_age_in_years_at_ascent || ' years ' ||
+ extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) ||
+ ' days to ' ||
+ o.max_age_in_years_at_ascent || ' years ' ||
+ extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) ||
+ ' days'
+ end as "Age"

from
oldest o
4593 23rd March 2026 23:58:15 UTC baz9 list Oldest Ascents (with date ranges) list_description_pretty
Before
None
After
<p>This is a list of the oldest ascents at each grade.</p>
4594 23rd March 2026 23:58:15 UTC baz9 list Oldest Ascents (with date ranges) list_description
Before
None
After
This is a list of the oldest ascents at each grade.
Diff
--- before

+++ after

@@ -1 +1 @@

-
+This is a list of the oldest ascents at each grade.
4595 23rd March 2026 23:58:15 UTC baz9 list Oldest Ascents (with date ranges) list_name
Before
None
After
Oldest Ascents (with date ranges)
4596 23rd March 2026 23:58:15 UTC baz9 list Oldest Ascents (with date ranges) list_type_name
Before
None
After
Misc.
4597 23rd March 2026 23:58:15 UTC baz9 list Oldest Ascents (with date ranges) list_type_id
Before
None
After
5
4598 23rd March 2026 23:58:15 UTC baz9 list Oldest Ascents (with date ranges) list_definition
Before
None
After
with climbers_with_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start ,c.date_of_birth_end from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_end is not null ), ascents_with_ages as ( select row_number() over ( partition by g.grade_id order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc ) as row_number ,c.climber_id ,c.climber_name ,cl.climb_id ,cl.climb_name ,g.grade_id ,g.grade_system_id ,g.climb_type_id ,g.order_on ,g.grade ,a.ascent_dt_start ,c.date_of_birth_start ,c.date_of_birth_end ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent ,a.ascent_dt_start - c.date_of_birth_start as max_age_in_days_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent ,extract(year from age(a.ascent_dt_start, c.date_of_birth_start))::integer as max_age_in_years_at_ascent from ascents a inner join climbers_with_dobs c on a.climber_id = c.climber_id and a.deleted_on is null inner join climbs cl on cl.climb_id = a.climb_id and cl.deleted_on is null inner join grades g on cl.grade_id = g.grade_id where a.ascent_dt_start is not null ), oldest as ( select * from ascents_with_ages where row_number = 1 ) select o.grade ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber" ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb" ,o.min_age_in_days_at_ascent as "Age (Days)" ,o.min_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) || ' days to ' || o.max_age_in_years_at_ascent || ' years ' || extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) || ' days' as "Age" from oldest o where case when o.grade_system_id = 1 and o.order_on >= 13 then 1 when o.grade_system_id = 2 and o.order_on >= 60 then 1 when o.grade_system_id = 3 and o.order_on >= 37 then 1 else 0 end = 1 and o.climb_type_id in (1,2,3) order by o.grade_system_id ,o.order_on
Diff
--- before

+++ after

@@ -1 +1,89 @@

+with climbers_with_dobs as (
+ select
+ c.climber_id
+ ,c.climber_name
+ ,c.date_of_birth_start
+ ,c.date_of_birth_end
+
+ from
+ climbers c
+
+ where
+ c.deleted_on is null
+ and c.date_of_birth_start is not null
+ and c.date_of_birth_end is not null
+), ascents_with_ages as (
+ select
+ row_number() over (
+ partition by g.grade_id
+ order by a.ascent_dt_start - c.date_of_birth_end desc, a.ascent_dt_start asc
+ ) as row_number
+ ,c.climber_id
+ ,c.climber_name
+ ,cl.climb_id
+ ,cl.climb_name
+ ,g.grade_id
+ ,g.grade_system_id
+ ,g.climb_type_id
+ ,g.order_on
+ ,g.grade
+ ,a.ascent_dt_start
+ ,c.date_of_birth_start
+ ,c.date_of_birth_end
+ ,a.ascent_dt_start - c.date_of_birth_end as min_age_in_days_at_ascent
+ ,a.ascent_dt_start - c.date_of_birth_start as max_age_in_days_at_ascent
+ ,extract(year from age(a.ascent_dt_start, c.date_of_birth_end))::integer as min_age_in_years_at_ascent
+ ,extract(year from age(a.ascent_dt_start, c.date_of_birth_start))::integer as max_age_in_years_at_ascent
+
+ from
+ ascents a
+ inner join climbers_with_dobs c
+ on a.climber_id = c.climber_id
+ and a.deleted_on is null
+ inner join climbs cl
+ on cl.climb_id = a.climb_id
+ and cl.deleted_on is null
+ inner join grades g
+ on cl.grade_id = g.grade_id
+
+ where
+ a.ascent_dt_start is not null
+), oldest as (
+ select
+ *
+
+ from
+ ascents_with_ages
+
+ where
+ row_number = 1
+)
+
+select
+ o.grade
+ ,'<a href="/climber/' || o.climber_id::varchar || '">' || o.climber_name || '</a>' as "Climber"
+ ,'<a href="/climb/' || o.climb_id::varchar || '">' || o.climb_name || '</a>' as "Climb"
+ ,o.min_age_in_days_at_ascent as "Age (Days)"
+ ,o.min_age_in_years_at_ascent || ' years ' ||
+ extract(days from o.ascent_dt_start - (o.date_of_birth_end + make_interval(years => o.min_age_in_years_at_ascent))) ||
+ ' days to ' ||
+ o.max_age_in_years_at_ascent || ' years ' ||
+ extract(days from o.ascent_dt_start - (o.date_of_birth_start + make_interval(years => o.max_age_in_years_at_ascent))) ||
+ ' days' as "Age"
+
+from
+ oldest o
+
+where
+ case
+ when o.grade_system_id = 1 and o.order_on >= 13 then 1
+ when o.grade_system_id = 2 and o.order_on >= 60 then 1
+ when o.grade_system_id = 3 and o.order_on >= 37 then 1
+ else 0
+ end = 1
+ and o.climb_type_id in (1,2,3)
+
+order by
+ o.grade_system_id
+ ,o.order_on
4599 23rd March 2026 22:32:59 UTC baz9 media https://www.instagram.com/p/DJGsXORo-HA/ embed_check_ok
Before
None
After
true
4600 23rd March 2026 22:32:59 UTC baz9 media https://www.instagram.com/p/DJGsXORo-HA/ url
Before
None
After
https://www.instagram.com/p/DJGsXORo-HA/

< Page 230 >