Mattsparksy

Badges

OG100 Contributions1,000 Contributions10 Posts

Contributions

Posts

1 Day

10

7 Days

10

4 Weeks

76

All Time

6860

Current Streak

1

Longest Streak

10

Contributions Map

Contributions by Country

Country Contributions Between Climbers Crags Summits Climbs Ascents
1 United Kingdom 3360 6th August 2024 – 16th July 2026 58 216 0 69 302
2 Australia 928 30th December 2024 – 15th November 2025 28 5 0 28 72
3 USA 362 20th December 2024 – 5th May 2026 10 16 0 10 33
4 Switzerland 239 30th December 2024 – 17th May 2026 0 10 0 4 31
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 Canada 49 10th September 2024 – 10th September 2025 1 1 0 1 4
8 South Africa 48 15th May 2025 – 20th June 2026 1 0 0 2 3
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

Recent Contributions

Date Time User Type Name Attribute
6321 30th December 2024 18:58:27 UTC Mattsparksy crag Lily Savage Boulders latitude
Before
53.129614018899716
After
53.129614
6322 30th December 2024 18:57:52 UTC Mattsparksy crag Rivelin Edge rock_type
Before
None
After
Gritstone
6323 30th December 2024 18:57:52 UTC Mattsparksy crag Rivelin Edge rock_type_id
Before
None
After
6
6324 30th December 2024 18:57:37 UTC Mattsparksy crag Arisaig Cave longitude
Before
-5.86479919910516
After
-5.864799
6325 30th December 2024 18:57:37 UTC Mattsparksy crag Arisaig Cave rock_type
Before
None
After
Quartzite
6326 30th December 2024 18:57:37 UTC Mattsparksy crag Arisaig Cave rock_type_id
Before
None
After
14
6327 30th December 2024 18:57:37 UTC Mattsparksy crag Arisaig Cave latitude
Before
56.88352408520255
After
56.883524
6328 30th December 2024 18:57:05 UTC Mattsparksy crag Hueco Tanks rock_type_id
Before
None
After
3
6329 30th December 2024 18:57:05 UTC Mattsparksy crag Hueco Tanks rock_type
Before
None
After
Granite
6330 30th December 2024 18:55:34 UTC Mattsparksy crag Villanueva del Rosario rock_type
Before
None
After
Limestone
6331 30th December 2024 18:55:34 UTC Mattsparksy crag Villanueva del Rosario rock_type_id
Before
None
After
7
6332 30th December 2024 18:55:17 UTC Mattsparksy crag Kay Nest rock_type
Before
None
After
Sandstone
6333 30th December 2024 18:55:17 UTC Mattsparksy crag Kay Nest rock_type_id
Before
None
After
12
6334 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
6335 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
6336 30th December 2024 18:45:04 UTC Mattsparksy list Britains Hardest Boulders Through Time list_type_name
Before
None
After
Bouldering
6337 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>
6338 30th December 2024 18:45:04 UTC Mattsparksy list Britains Hardest Boulders Through Time list_name
Before
None
After
Britains Hardest Boulders Through Time
6339 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.
6340 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('<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
+

< Page 317 >