| Country | Contributions | Between | Climbers | Crags | Summits | Climbs | Ascents | |
|---|---|---|---|---|---|---|---|---|
| 1 | United Kingdom | 3482 | 6th August 2024 – 3rd October 2026 | 61 | 216 | 0 | 72 | 314 |
| 2 | Australia | 918 | 30th December 2024 – 15th November 2025 | 27 | 5 | 0 | 28 | 72 |
| 3 | USA | 362 | 20th December 2024 – 5th May 2026 | 10 | 16 | 0 | 10 | 33 |
| 4 | Switzerland | 262 | 30th December 2024 – 16th October 2026 | 0 | 10 | 0 | 6 | 33 |
| 5 | France | 203 | 1st September 2024 – 16th April 2026 | 4 | 30 | 0 | 3 | 12 |
| 6 | Spain | 82 | 3rd November 2024 – 25th March 2026 | 0 | 15 | 0 | 2 | 8 |
| 7 | South Africa | 56 | 15th May 2025 – 16th August 2026 | 1 | 0 | 0 | 2 | 5 |
| 8 | Canada | 49 | 10th September 2024 – 10th September 2025 | 1 | 1 | 0 | 1 | 4 |
| 9 | Italy | 44 | 31st December 2024 – 21st June 2026 | 2 | 6 | 0 | 1 | 3 |
| 10 | Japan | 31 | 30th December 2024 – 12th November 2025 | 0 | 2 | 0 | 0 | 3 |
| Date | Time | User | Type | Name | Attribute | ||
|---|---|---|---|---|---|---|---|
| 6501 | 30th December 2024 | 18:55:17 UTC | Mattsparksy | crag | Kay Nest | rock_type_id | |
|
Before
None
After
12
|
|||||||
| 6502 | 30th December 2024 | 18:50:30 UTC | Mattsparksy | list | Britains Hardest Boulders Through Time | list_definition | |
|
Before
with recursive per_year as (
select
date_part('year', a.ascent_dt_start) as yr
,ast.ascent_style_id
,max(g.order_on) as max_grade_order_on
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
and c.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join climb_types ct
on c.climb_type = ct.climb_type_id
inner join ascent_styles ast
on a.ascent_style_id = ast.ascent_style_id
where
ct.climb_type = 'Boulder'
and ast.ascent_successful = true
and a.ascent_type_id = 1
group by
date_part('year', a.ascent_dt_start)
,ast.ascent_style_id
,ast.ascent_style
), best_up_to as (
select
yr
,ascent_style_id
,max(max_grade_order_on) over (partition by ascent_style_id order by yr ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as best
from
per_year
), candidates as (
select
c.climb_name
,c.climb_id
,g.grade
,cl.climber_name
,cl.climber_id
,a.ascent_dt_start
,a.ascent_dt_end
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join best_up_to but
on a.ascent_style_id = but.ascent_style_id
and date_part('year', a.ascent_dt_start) = but.yr
and g.order_on = but.best
where
a.ascent_type_id = 1
and a.ascent_style_id = 1
), dts as (
select
1970 as yr
union all
select
yr + 1
from
dts
where
yr <= (select max(date_part('year', ascent_dt_start)) from candidates)
)
select
dts.yr as Year
,c.grade as Grade
,string_agg('<a href="/climber/' || climber_id::varchar || '">' || climber_name || '</a> with <a href="/climb/' || climb_id::varchar || '">' || climb_name || '</a>', '<br>') as Climbers
from
dts
left join candidates c
on dts.yr = date_part('year', c.ascent_dt_start)
group by
dts.yr
,c.grade
order by
dts.yr
After
with recursive per_year as (
select
date_part('year', a.ascent_dt_start) as yr
,ast.ascent_style_id
,max(g.order_on) as max_grade_order_on
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
and c.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join climb_types ct
on c.climb_type = ct.climb_type_id
inner join ascent_styles ast
on a.ascent_style_id = ast.ascent_style_id
where
ct.climb_type = 'Boulder problem'
and ast.ascent_successful = true
and a.ascent_type_id = 1
group by
date_part('year', a.ascent_dt_start)
,ast.ascent_style_id
,ast.ascent_style
), best_up_to as (
select
yr
,ascent_style_id
,max(max_grade_order_on) over (partition by ascent_style_id order by yr ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as best
from
per_year
), candidates as (
select
c.climb_name
,c.climb_id
,g.grade
,cl.climber_name
,cl.climber_id
,a.ascent_dt_start
,a.ascent_dt_end
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join best_up_to but
on a.ascent_style_id = but.ascent_style_id
and date_part('year', a.ascent_dt_start) = but.yr
and g.order_on = but.best
where
a.ascent_type_id = 1
and a.ascent_style_id = 1
), dts as (
select
1970 as yr
union all
select
yr + 1
from
dts
where
yr <= (select max(date_part('year', ascent_dt_start)) from candidates)
)
select
dts.yr as Year
,c.grade as Grade
,string_agg('<a href="/climber/' || climber_id::varchar || '">' || climber_name || '</a> with <a href="/climb/' || climb_id::varchar || '">' || climb_name || '</a>', '<br>') as Climbers
from
dts
left join candidates c
on dts.yr = date_part('year', c.ascent_dt_start)
group by
dts.yr
,c.grade
order by
dts.yr
Diff
--- before
|
|||||||
| 6503 | 30th December 2024 | 18:46:33 UTC | Mattsparksy | list | Britains Hardest Boulders Through Time | list_definition | |
|
Before
with recursive per_year as (
select
date_part('year', a.ascent_dt_start) as yr
,ast.ascent_style_id
,max(g.order_on) as max_grade_order_on
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
and c.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join climb_types ct
on c.climb_type = ct.climb_type_id
inner join ascent_styles ast
on a.ascent_style_id = ast.ascent_style_id
where
ct.climb_type = 'Sport route'
and ast.ascent_successful = true
and a.ascent_type_id = 1
group by
date_part('year', a.ascent_dt_start)
,ast.ascent_style_id
,ast.ascent_style
), best_up_to as (
select
yr
,ascent_style_id
,max(max_grade_order_on) over (partition by ascent_style_id order by yr ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as best
from
per_year
), candidates as (
select
c.climb_name
,c.climb_id
,g.grade
,cl.climber_name
,cl.climber_id
,a.ascent_dt_start
,a.ascent_dt_end
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join best_up_to but
on a.ascent_style_id = but.ascent_style_id
and date_part('year', a.ascent_dt_start) = but.yr
and g.order_on = but.best
where
a.ascent_type_id = 1
and a.ascent_style_id = 1
), dts as (
select
1970 as yr
union all
select
yr + 1
from
dts
where
yr <= (select max(date_part('year', ascent_dt_start)) from candidates)
)
select
dts.yr as Year
,c.grade as Grade
,string_agg('<a href="/climber/' || climber_id::varchar || '">' || climber_name || '</a> with <a href="/climb/' || climb_id::varchar || '">' || climb_name || '</a>', '<br>') as Climbers
from
dts
left join candidates c
on dts.yr = date_part('year', c.ascent_dt_start)
group by
dts.yr
,c.grade
order by
dts.yr
After
with recursive per_year as (
select
date_part('year', a.ascent_dt_start) as yr
,ast.ascent_style_id
,max(g.order_on) as max_grade_order_on
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
and c.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join climb_types ct
on c.climb_type = ct.climb_type_id
inner join ascent_styles ast
on a.ascent_style_id = ast.ascent_style_id
where
ct.climb_type = 'Boulder'
and ast.ascent_successful = true
and a.ascent_type_id = 1
group by
date_part('year', a.ascent_dt_start)
,ast.ascent_style_id
,ast.ascent_style
), best_up_to as (
select
yr
,ascent_style_id
,max(max_grade_order_on) over (partition by ascent_style_id order by yr ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as best
from
per_year
), candidates as (
select
c.climb_name
,c.climb_id
,g.grade
,cl.climber_name
,cl.climber_id
,a.ascent_dt_start
,a.ascent_dt_end
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join best_up_to but
on a.ascent_style_id = but.ascent_style_id
and date_part('year', a.ascent_dt_start) = but.yr
and g.order_on = but.best
where
a.ascent_type_id = 1
and a.ascent_style_id = 1
), dts as (
select
1970 as yr
union all
select
yr + 1
from
dts
where
yr <= (select max(date_part('year', ascent_dt_start)) from candidates)
)
select
dts.yr as Year
,c.grade as Grade
,string_agg('<a href="/climber/' || climber_id::varchar || '">' || climber_name || '</a> with <a href="/climb/' || climb_id::varchar || '">' || climb_name || '</a>', '<br>') as Climbers
from
dts
left join candidates c
on dts.yr = date_part('year', c.ascent_dt_start)
group by
dts.yr
,c.grade
order by
dts.yr
Diff
--- before
|
|||||||
| 6504 | 30th December 2024 | 18:45:04 UTC | Mattsparksy | list | Britains Hardest Boulders Through Time | list_description | |
|
Before
None
After
Britains hardest boulders through time.
Diff
--- before
|
|||||||
| 6505 | 30th December 2024 | 18:45:04 UTC | Mattsparksy | list | Britains Hardest Boulders Through Time | list_type_name | |
|
Before
None
After
Bouldering
|
|||||||
| 6506 | 30th December 2024 | 18:45:04 UTC | Mattsparksy | list | Britains Hardest Boulders Through Time | list_type_id | |
|
Before
None
After
1
|
|||||||
| 6507 | 30th December 2024 | 18:45:04 UTC | Mattsparksy | list | Britains Hardest Boulders Through Time | list_description_pretty | |
|
Before
None
After
<p>Britains hardest boulders through time.</p>
|
|||||||
| 6508 | 30th December 2024 | 18:45:04 UTC | Mattsparksy | list | Britains Hardest Boulders Through Time | list_definition | |
|
Before
None
After
with recursive per_year as (
select
date_part('year', a.ascent_dt_start) as yr
,ast.ascent_style_id
,max(g.order_on) as max_grade_order_on
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
and c.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join climb_types ct
on c.climb_type = ct.climb_type_id
inner join ascent_styles ast
on a.ascent_style_id = ast.ascent_style_id
where
ct.climb_type = 'Sport route'
and ast.ascent_successful = true
and a.ascent_type_id = 1
group by
date_part('year', a.ascent_dt_start)
,ast.ascent_style_id
,ast.ascent_style
), best_up_to as (
select
yr
,ascent_style_id
,max(max_grade_order_on) over (partition by ascent_style_id order by yr ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as best
from
per_year
), candidates as (
select
c.climb_name
,c.climb_id
,g.grade
,cl.climber_name
,cl.climber_id
,a.ascent_dt_start
,a.ascent_dt_end
from
ascents a
inner join climbs c
on a.climb_id = c.climb_id
and a.deleted_on is null
and c.deleted_on is null
and a.exclude_reason is null
inner join climbers cl
on a.climber_id = cl.climber_id
and cl.deleted_on is null
and cl.exclude_reason is null
inner join grades g
on c.grade_id = g.grade_id
inner join best_up_to but
on a.ascent_style_id = but.ascent_style_id
and date_part('year', a.ascent_dt_start) = but.yr
and g.order_on = but.best
where
a.ascent_type_id = 1
and a.ascent_style_id = 1
), dts as (
select
1970 as yr
union all
select
yr + 1
from
dts
where
yr <= (select max(date_part('year', ascent_dt_start)) from candidates)
)
select
dts.yr as Year
,c.grade as Grade
,string_agg('<a href="/climber/' || climber_id::varchar || '">' || climber_name || '</a> with <a href="/climb/' || climb_id::varchar || '">' || climb_name || '</a>', '<br>') as Climbers
from
dts
left join candidates c
on dts.yr = date_part('year', c.ascent_dt_start)
group by
dts.yr
,c.grade
order by
dts.yr
Diff
--- before
|
|||||||
| 6509 | 30th December 2024 | 18:45:04 UTC | Mattsparksy | list | Britains Hardest Boulders Through Time | list_name | |
|
Before
None
After
Britains Hardest Boulders Through Time
|
|||||||
| 6510 | 30th December 2024 | 18:03:53 UTC | Mattsparksy | crag | The Cobbler | rock_type | |
|
Before
None
After
Schist
|
|||||||
| 6511 | 30th December 2024 | 18:03:53 UTC | Mattsparksy | crag | The Cobbler | rock_type_id | |
|
Before
None
After
16
|
|||||||
| 6512 | 30th December 2024 | 18:03:40 UTC | Mattsparksy | crag | Blackers Hole | rock_type_id | |
|
Before
None
After
7
|
|||||||
| 6513 | 30th December 2024 | 18:03:40 UTC | Mattsparksy | crag | Blackers Hole | rock_type | |
|
Before
None
After
Limestone
|
|||||||
| 6514 | 30th December 2024 | 18:03:28 UTC | Mattsparksy | crag | Simonside Woods | rock_type | |
|
Before
None
After
Sandstone
|
|||||||
| 6515 | 30th December 2024 | 18:03:28 UTC | Mattsparksy | crag | Simonside Woods | rock_type_id | |
|
Before
None
After
12
|
|||||||
| 6516 | 30th December 2024 | 18:03:15 UTC | Mattsparksy | crag | Ben Nevis | rock_type | |
|
Before
None
After
Andesite
|
|||||||
| 6517 | 30th December 2024 | 18:03:15 UTC | Mattsparksy | crag | Ben Nevis | rock_type_id | |
|
Before
None
After
17
|
|||||||
| 6518 | 30th December 2024 | 18:02:58 UTC | Mattsparksy | crag | Gallt yr Ogof | rock_type_id | |
|
Before
None
After
4
|
|||||||
| 6519 | 30th December 2024 | 18:02:58 UTC | Mattsparksy | crag | Gallt yr Ogof | rock_type | |
|
Before
None
After
Rhyolite
|
|||||||
| 6520 | 30th December 2024 | 18:02:45 UTC | Mattsparksy | crag | Earl Crag | rock_type | |
|
Before
None
After
Gritstone
|
|||||||