Mattsparksy

Badges

OG100 Contributions1,000 Contributions10 Posts

Contributions

Posts

1 Day

0

7 Days

3

4 Weeks

339

All Time

6652

Current Streak

0

Longest Streak

10

Top Contributions

Name Type # Changes Last Updated First Updated
1 https://www.instagram.com/p/DJRzZIzOOWv/ media 30 5th May 2025 5th May 2025
2 Hamish McArthur's ascent of No One Mourns the Wicked ascent 27 5th May 2025 5th May 2025
3 https://www.youtube.com/watch?v=r6lWVJrigTA media 24 5th May 2025 5th May 2025
4 Pietro Vidi's ascent of L’Ombre du Voyageur ascent 21 21st July 2025 21st July 2025
5 https://www.instagram.com/p/DGBh2g-tGHO/ media 18 13th February 2025 13th February 2025
6 https://www.instagram.com/p/DMXd2WxtNjn/ media 18 21st July 2025 21st July 2025
7 Dan Varian's ascent of The Seam Engine ascent 17 23rd March 2026 23rd March 2026
8 Solly Kemball-Dorey's ascent of The Trident ascent 17 23rd December 2025 21st August 2025
9 Sébastien Dussaut climber 17 31st May 2025 13th May 2025
10 Eli Cartwright's ascent of Outliers ascent 16 14th May 2025 2nd April 2025

Recent Contributions

Date Time User Type Name Attribute
6121 30th December 2024 18:57:37 UTC Mattsparksy crag Arisaig Cave rock_type
Before
None
After
Quartzite
6122 30th December 2024 18:57:37 UTC Mattsparksy crag Arisaig Cave rock_type_id
Before
None
After
14
6123 30th December 2024 18:57:37 UTC Mattsparksy crag Arisaig Cave longitude
Before
-5.86479919910516
After
-5.864799
6124 30th December 2024 18:57:37 UTC Mattsparksy crag Arisaig Cave latitude
Before
56.88352408520255
After
56.883524
6125 30th December 2024 18:57:05 UTC Mattsparksy crag Hueco Tanks rock_type
Before
None
After
Granite
6126 30th December 2024 18:57:05 UTC Mattsparksy crag Hueco Tanks rock_type_id
Before
None
After
3
6127 30th December 2024 18:55:34 UTC Mattsparksy crag Villanueva del Rosario rock_type_id
Before
None
After
7
6128 30th December 2024 18:55:34 UTC Mattsparksy crag Villanueva del Rosario rock_type
Before
None
After
Limestone
6129 30th December 2024 18:55:17 UTC Mattsparksy crag Kay Nest rock_type
Before
None
After
Sandstone
6130 30th December 2024 18:55:17 UTC Mattsparksy crag Kay Nest rock_type_id
Before
None
After
12
6131 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

+++ after

@@ -24,7 +24,7 @@

on a.ascent_style_id = ast.ascent_style_id

where
- ct.climb_type = 'Boulder'
+ ct.climb_type = 'Boulder problem'
and ast.ascent_successful = true
and a.ascent_type_id = 1

6132 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

+++ after

@@ -24,7 +24,7 @@

on a.ascent_style_id = ast.ascent_style_id

where
- ct.climb_type = 'Sport route'
+ ct.climb_type = 'Boulder'
and ast.ascent_successful = true
and a.ascent_type_id = 1

6133 30th December 2024 18:45:04 UTC Mattsparksy list Britains Hardest Boulders Through Time list_type_name
Before
None
After
Bouldering
6134 30th December 2024 18:45:04 UTC Mattsparksy list Britains Hardest Boulders Through Time list_type_id
Before
None
After
1
6135 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>
6136 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

+++ after

@@ -1 +1,107 @@

-
+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('' || climber_name || ' with ' || climb_name || '', '
') 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
+
6137 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

+++ after

@@ -1 +1 @@

-
+Britains hardest boulders through time.
6138 30th December 2024 18:45:04 UTC Mattsparksy list Britains Hardest Boulders Through Time list_name
Before
None
After
Britains Hardest Boulders Through Time
6139 30th December 2024 18:03:53 UTC Mattsparksy crag The Cobbler rock_type
Before
None
After
Schist
6140 30th December 2024 18:03:53 UTC Mattsparksy crag The Cobbler rock_type_id
Before
None
After
16

< Page 307 >