ben_sandi

Badges

100 Contributions1,000 Contributions10 Posts

Contributions

Posts

1 Day

62

7 Days

76

4 Weeks

113

All Time

6752

Current Streak

1

Longest Streak

13

Contributions Map

Contributions by Country

Country Contributions Between Climbers Crags Summits Climbs Ascents
1 USA 1526 20th November 2025 – 4th November 2026 48 20 0 88 98
2 Australia 767 27th September 2025 – 29th June 2026 6 38 0 61 33
3 United Kingdom 625 19th November 2025 – 4th November 2026 34 14 0 24 49
4 Switzerland 308 24th January 2026 – 4th November 2026 6 3 0 14 38
5 France 300 6th January 2026 – 4th November 2026 15 3 0 12 34
6 Austria 210 12th November 2025 – 22nd June 2026 5 2 0 8 22
7 Italy 163 18th November 2025 – 2nd November 2026 9 3 0 12 12
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
3861 9th April 2026 23:16:34 UTC ben_sandi climber Jordan Cannon notes_pretty
Before
<p>Yosemite trad climber, notably climbed the <a href="/list/90/el-cap-triple" rel="noopener noreferrer">El Cap Triple</a> in under 24 hours.</p>
After
<p>American big wall climber known for fast ascents and linkups in Yosemite. In 2025, alongside <a href="/climber/3868/michael-vaill" rel="noopener noreferrer">Michael Vaill</a> , he became part of the second team to complete the <a href="/list/90/el-cap-triple" rel="noopener noreferrer">El Cap Triple</a> in under 24 hours, following <a href="/climber/622/alex-honnold" rel="noopener noreferrer">Alex Honnold</a> and <a href="/climber/1304/sean-leary" rel="noopener noreferrer">Sean Leary</a>.</p>
3862 9th April 2026 23:16:34 UTC ben_sandi climber Jordan Cannon notes
Before
Yosemite trad climber, notably climbed the [El Cap Triple](/list/90/el-cap-triple) in under 24 hours.
After
American big wall climber known for fast ascents and linkups in Yosemite. In 2025, alongside [Michael Vaill](/climber/3868/michael-vaill) , he became part of the second team to complete the [El Cap Triple](/list/90/el-cap-triple) in under 24 hours, following [Alex Honnold](/climber/622/alex-honnold) and [Sean Leary](/climber/1304/sean-leary).
Diff
--- before

+++ after

@@ -1 +1 @@

-Yosemite trad climber, notably climbed the [El Cap Triple](/list/90/el-cap-triple) in under 24 hours.
+American big wall climber known for fast ascents and linkups in Yosemite. In 2025, alongside [Michael Vaill](/climber/3868/michael-vaill) , he became part of the second team to complete the [El Cap Triple](/list/90/el-cap-triple) in under 24 hours, following [Alex Honnold](/climber/622/alex-honnold) and [Sean Leary](/climber/1304/sean-leary).
3863 9th April 2026 23:01:12 UTC ben_sandi climber Jordan Cannon notes_pretty
Before
<p>Yosemite trad climber, notably climbed the <a href="/list/90/el-cap-triple" rel="noopener noreferrer">El Cap Triple</a> in under 24 hours.</p> <h3>References</h3> <p>[1] <a href="https://www.outsideonline.com/culture/essays-culture/professional-climber-jordan-cannon-comes-out-gay/" rel="noopener noreferrer">https://www.outsideonline.com/culture/essays-culture/professional-climber-jordan-cannon-comes-out-gay/</a></p> <p>[2] Birthday coming out post <a href="https://www.instagram.com/p/COXoEEDDgTP/" rel="noopener noreferrer">https://www.instagram.com/p/COXoEEDDgTP/</a></p> <p>[3] <a href="https://runoutpodcast.com/index.php/2021/05/03/runout-61-jordan-comes-out/" rel="noopener noreferrer">https://runoutpodcast.com/index.php/2021/05/03/runout-61-jordan-comes-out/</a></p>
After
<p>Yosemite trad climber, notably climbed the <a href="/list/90/el-cap-triple" rel="noopener noreferrer">El Cap Triple</a> in under 24 hours.</p>
3864 9th April 2026 23:01:12 UTC ben_sandi climber Jordan Cannon notes
Before
Yosemite trad climber, notably climbed the [El Cap Triple](/list/90/el-cap-triple) in under 24 hours. ### References [1] [https://www.outsideonline.com/culture/essays-culture/professional-climber-jordan-cannon-comes-out-gay/](https://www.outsideonline.com/culture/essays-culture/professional-climber-jordan-cannon-comes-out-gay/) [2] Birthday coming out post [https://www.instagram.com/p/COXoEEDDgTP/](https://www.instagram.com/p/COXoEEDDgTP/) [3] [https://runoutpodcast.com/index.php/2021/05/03/runout-61-jordan-comes-out/](https://runoutpodcast.com/index.php/2021/05/03/runout-61-jordan-comes-out/)
After
Yosemite trad climber, notably climbed the [El Cap Triple](/list/90/el-cap-triple) in under 24 hours.
Diff
--- before

+++ after

@@ -1,9 +1 @@

-Yosemite trad climber, notably climbed the [El Cap Triple](/list/90/el-cap-triple) in under 24 hours.
-
-### References
-
-[1] [https://www.outsideonline.com/culture/essays-culture/professional-climber-jordan-cannon-comes-out-gay/](https://www.outsideonline.com/culture/essays-culture/professional-climber-jordan-cannon-comes-out-gay/)
-
-[2] Birthday coming out post [https://www.instagram.com/p/COXoEEDDgTP/](https://www.instagram.com/p/COXoEEDDgTP/)
-
-[3] [https://runoutpodcast.com/index.php/2021/05/03/runout-61-jordan-comes-out/](https://runoutpodcast.com/index.php/2021/05/03/runout-61-jordan-comes-out/)
+Yosemite trad climber, notably climbed the [El Cap Triple](/list/90/el-cap-triple) in under 24 hours.
3865 9th April 2026 22:50:04 UTC ben_sandi list Quickest Ascents of Hard Boulder Problems list_definition
Before
select '<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber ,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb ,g.grade as Grade ,am.value as Sessions ,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date" from ascents a inner join climbers c on a.climber_id = c.climber_id inner join climbs cl on a.climb_id = cl.climb_id inner join grades g on cl.grade_id = g.grade_id inner join ascent_styles asty on a.ascent_style_id = asty.ascent_style_id inner join ascent_meta am on a.ascent_id = am.ascent_id inner join ascent_meta_keys amk on am.ascent_meta_key_id = amk.ascent_meta_key_id where a.deleted_on is null and c.deleted_on is null and cl.deleted_on is null and a.exclude_reason is null and c.exclude_reason is null and cl.exclude_reason is null and cl.climb_type = 2 and asty.ascent_successful and not a.ascent_type_id = 6 and g.order_on >= 42 and amk.key in ('Sessions', 'Sessions (Approx)') and am.value ~ '^[0-9]+$' and am.value::integer < 6 order by g.grade_id desc ,am.value::integer ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
After
select '<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber ,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb ,g.grade as Grade ,case when amk.key = 'Sessions (Approx)' then am.value || ' (approx)' when amk.key = 'Sessions (Less Than)' then am.value || ' (or less)' else am.value end as Sessions ,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date" from ascents a inner join climbers c on a.climber_id = c.climber_id inner join climbs cl on a.climb_id = cl.climb_id inner join grades g on cl.grade_id = g.grade_id inner join ascent_styles asty on a.ascent_style_id = asty.ascent_style_id inner join ascent_meta am on a.ascent_id = am.ascent_id inner join ascent_meta_keys amk on am.ascent_meta_key_id = amk.ascent_meta_key_id where a.deleted_on is null and c.deleted_on is null and cl.deleted_on is null and a.exclude_reason is null and c.exclude_reason is null and cl.exclude_reason is null and cl.climb_type = 2 and asty.ascent_successful and not a.ascent_type_id = 6 and g.order_on >= 42 and am.value ~ '^[0-9]+$' and ( ( amk.key in ('Sessions', 'Sessions (Approx)') and am.value::integer < 6 ) or ( amk.key = 'Sessions (Less Than)' and am.value::integer <= 6 ) ) order by g.grade_id desc ,case when amk.key = 'Sessions (Less Than)' then am.value::integer else am.value::integer end ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
Diff
--- before

+++ after

@@ -2,7 +2,11 @@

'<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber
,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb
,g.grade as Grade
- ,am.value as Sessions
+ ,case
+ when amk.key = 'Sessions (Approx)' then am.value || ' (approx)'
+ when amk.key = 'Sessions (Less Than)' then am.value || ' (or less)'
+ else am.value
+ end as Sessions
,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date"

from
@@ -31,12 +35,23 @@

and asty.ascent_successful
and not a.ascent_type_id = 6
and g.order_on >= 42
- and amk.key in ('Sessions', 'Sessions (Approx)')
and am.value ~ '^[0-9]+$'
- and am.value::integer < 6
+ and (
+ (
+ amk.key in ('Sessions', 'Sessions (Approx)')
+ and am.value::integer < 6
+ )
+ or (
+ amk.key = 'Sessions (Less Than)'
+ and am.value::integer <= 6
+ )
+ )

order by
g.grade_id desc
- ,am.value::integer
+ ,case
+ when amk.key = 'Sessions (Less Than)' then am.value::integer
+ else am.value::integer
+ end
,order_dt(a.ascent_dt_start, a.ascent_dt_end)
3866 9th April 2026 22:46:24 UTC ben_sandi list Quickest Ascents of Hard Boulder Problems list_definition
Before
with eight_c_plus_cutoff as ( select g.order_on from grades g where g.climb_type_id = 2 and g.grade = '8C+' ), session_meta as ( select a.ascent_id ,min( case when amk.key = 'Sessions' and am.value ~ '^[0-9]+$' and am.value::integer < 6 then am.value::integer when amk.key = 'Sessions (Approx)' and am.value ~ '^[0-9]+$' and am.value::integer < 6 then am.value::integer when amk.key = 'Sessions (Less Than)' and am.value ~ '^[0-9]+$' and am.value::integer <= 6 then am.value::integer - 1 else null end ) as sessions_sort ,string_agg( case when amk.key = 'Sessions' and am.value ~ '^[0-9]+$' and am.value::integer < 6 then amk.key || ': ' || am.value when amk.key = 'Sessions (Approx)' and am.value ~ '^[0-9]+$' and am.value::integer < 6 then amk.key || ': ' || am.value when amk.key = 'Sessions (Less Than)' and am.value ~ '^[0-9]+$' and am.value::integer <= 6 then amk.key || ': ' || am.value else null end ,', ' order by amk.key, am.value ) as session_meta from ascents a inner join ascent_meta am on a.ascent_id = am.ascent_id inner join ascent_meta_keys amk on am.ascent_meta_key_id = amk.ascent_meta_key_id where amk.key in ('Sessions', 'Sessions (Approx)', 'Sessions (Less Than)') group by a.ascent_id ) select a.ascent_id ,a.ascent_dt_start ,a.ascent_dt_end ,cl.climber_id ,cl.climber_name ,c.climb_id ,c.climb_name ,g.grade ,sm.session_meta ,sm.sessions_sort from ascents a inner join session_meta sm on a.ascent_id = sm.ascent_id inner join climbs c on a.climb_id = c.climb_id inner join climbers cl on a.climber_id = cl.climber_id inner join grades g on c.grade_id = g.grade_id inner join ascent_styles ast on a.ascent_style_id = ast.ascent_style_id where sm.sessions_sort is not null and c.climb_type_id = 2 and ast.ascent_successful = true and a.deleted_on is null and a.exclude_reason is null and c.deleted_on is null and c.exclude_reason is null and cl.deleted_on is null and cl.exclude_reason is null and g.order_on >= ( select ecc.order_on from eight_c_plus_cutoff ecc ) order by sm.sessions_sort ,g.order_on desc ,a.ascent_dt_start
After
select '<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber ,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb ,g.grade as Grade ,am.value as Sessions ,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date" from ascents a inner join climbers c on a.climber_id = c.climber_id inner join climbs cl on a.climb_id = cl.climb_id inner join grades g on cl.grade_id = g.grade_id inner join ascent_styles asty on a.ascent_style_id = asty.ascent_style_id inner join ascent_meta am on a.ascent_id = am.ascent_id inner join ascent_meta_keys amk on am.ascent_meta_key_id = amk.ascent_meta_key_id where a.deleted_on is null and c.deleted_on is null and cl.deleted_on is null and a.exclude_reason is null and c.exclude_reason is null and cl.exclude_reason is null and cl.climb_type = 2 and asty.ascent_successful and not a.ascent_type_id = 6 and g.order_on >= 42 and amk.key in ('Sessions', 'Sessions (Approx)') and am.value ~ '^[0-9]+$' and am.value::integer < 6 order by g.grade_id desc ,am.value::integer ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
Diff
--- before

+++ after

@@ -1,114 +1,42 @@

-with eight_c_plus_cutoff as (
- select
- g.order_on
-
- from
- grades g
-
- where
- g.climb_type_id = 2
- and g.grade = '8C+'
-),
-
-session_meta as (
- select
- a.ascent_id
- ,min(
- case
- when amk.key = 'Sessions'
- and am.value ~ '^[0-9]+$'
- and am.value::integer < 6
- then am.value::integer
- when amk.key = 'Sessions (Approx)'
- and am.value ~ '^[0-9]+$'
- and am.value::integer < 6
- then am.value::integer
- when amk.key = 'Sessions (Less Than)'
- and am.value ~ '^[0-9]+$'
- and am.value::integer <= 6
- then am.value::integer - 1
- else null
- end
- ) as sessions_sort
- ,string_agg(
- case
- when amk.key = 'Sessions'
- and am.value ~ '^[0-9]+$'
- and am.value::integer < 6
- then amk.key || ': ' || am.value
- when amk.key = 'Sessions (Approx)'
- and am.value ~ '^[0-9]+$'
- and am.value::integer < 6
- then amk.key || ': ' || am.value
- when amk.key = 'Sessions (Less Than)'
- and am.value ~ '^[0-9]+$'
- and am.value::integer <= 6
- then amk.key || ': ' || am.value
- else null
- end
- ,', '
- order by amk.key, am.value
- ) as session_meta
-
- from
- ascents a
- inner join ascent_meta am
- on a.ascent_id = am.ascent_id
- inner join ascent_meta_keys amk
- on am.ascent_meta_key_id = amk.ascent_meta_key_id
-
- where
- amk.key in ('Sessions', 'Sessions (Approx)', 'Sessions (Less Than)')
-
- group by
- a.ascent_id
-)
-
select
- a.ascent_id
- ,a.ascent_dt_start
- ,a.ascent_dt_end
- ,cl.climber_id
- ,cl.climber_name
- ,c.climb_id
- ,c.climb_name
- ,g.grade
- ,sm.session_meta
- ,sm.sessions_sort
-
+ '<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber
+ ,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb
+ ,g.grade as Grade
+ ,am.value as Sessions
+ ,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date"
+
from
- ascents a
- inner join session_meta sm
- on a.ascent_id = sm.ascent_id
- inner join climbs c
- on a.climb_id = c.climb_id
- inner join climbers cl
- on a.climber_id = cl.climber_id
- inner join grades g
- on c.grade_id = g.grade_id
- inner join ascent_styles ast
- on a.ascent_style_id = ast.ascent_style_id
-
+ ascents a
+ inner join climbers c
+ on a.climber_id = c.climber_id
+ inner join climbs cl
+ on a.climb_id = cl.climb_id
+ inner join grades g
+ on cl.grade_id = g.grade_id
+ inner join ascent_styles asty
+ on a.ascent_style_id = asty.ascent_style_id
+ inner join ascent_meta am
+ on a.ascent_id = am.ascent_id
+ inner join ascent_meta_keys amk
+ on am.ascent_meta_key_id = amk.ascent_meta_key_id
+
where
- sm.sessions_sort is not null
- and c.climb_type_id = 2
- and ast.ascent_successful = true
- and a.deleted_on is null
- and a.exclude_reason is null
- and c.deleted_on is null
- and c.exclude_reason is null
- and cl.deleted_on is null
- and cl.exclude_reason is null
- and g.order_on >= (
- select
- ecc.order_on
-
- from
- eight_c_plus_cutoff ecc
- )
-
+ a.deleted_on is null
+ and c.deleted_on is null
+ and cl.deleted_on is null
+ and a.exclude_reason is null
+ and c.exclude_reason is null
+ and cl.exclude_reason is null
+ and cl.climb_type = 2
+ and asty.ascent_successful
+ and not a.ascent_type_id = 6
+ and g.order_on >= 42
+ and amk.key in ('Sessions', 'Sessions (Approx)')
+ and am.value ~ '^[0-9]+$'
+ and am.value::integer < 6
+
order by
- sm.sessions_sort
- ,g.order_on desc
- ,a.ascent_dt_start
+ g.grade_id desc
+ ,am.value::integer
+ ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
3867 9th April 2026 22:45:10 UTC ben_sandi list Hard Boulder Problem Ascents list_definition
Before
select a.ascent_id as "#" ,'<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber ,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb ,g.grade as Grade ,am.value as Sessions ,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date" from ascents a inner join climbers c on a.climber_id = c.climber_id inner join climbs cl on a.climb_id = cl.climb_id inner join grades g on cl.grade_id = g.grade_id inner join ascent_styles asty on a.ascent_style_id = asty.ascent_style_id inner join ascent_meta am on a.ascent_id = am.ascent_id inner join ascent_meta_keys amk on am.ascent_meta_key_id = amk.ascent_meta_key_id where a.deleted_on is null and c.deleted_on is null and cl.deleted_on is null and a.exclude_reason is null and c.exclude_reason is null and cl.exclude_reason is null and cl.climb_type = 2 and asty.ascent_successful and not a.ascent_type_id = 6 and g.order_on >= 42 and amk.key in ('Sessions', 'Sessions (Approx)') and am.value ~ '^[0-9]+$' and am.value::integer < 6 order by g.grade_id desc ,am.value::integer ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
After
select '<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber ,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb ,g.grade ,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date" from ascents a inner join climbers c on a.climber_id = c.climber_id inner join climbs cl on a.climb_id = cl.climb_id inner join grades g on cl.grade_id = g.grade_id inner join ascent_styles asty on a.ascent_style_id = asty.ascent_style_id where a.deleted_on is null and c.deleted_on is null and cl.deleted_on is null and a.exclude_reason is null and c.exclude_reason is null and cl.exclude_reason is null and g.order_on >= 42 and cl.climb_type = 2 and asty.ascent_successful and not a.ascent_type_id = 6 order by g.grade_id desc ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
Diff
--- before

+++ after

@@ -1,9 +1,7 @@

select
- a.ascent_id as "#"
- ,'<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber
+ '<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber
,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb
- ,g.grade as Grade
- ,am.value as Sessions
+ ,g.grade
,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date"

from
@@ -16,10 +14,6 @@

on cl.grade_id = g.grade_id
inner join ascent_styles asty
on a.ascent_style_id = asty.ascent_style_id
- inner join ascent_meta am
- on a.ascent_id = am.ascent_id
- inner join ascent_meta_keys amk
- on am.ascent_meta_key_id = amk.ascent_meta_key_id

where
a.deleted_on is null
@@ -28,16 +22,11 @@

and a.exclude_reason is null
and c.exclude_reason is null
and cl.exclude_reason is null
+ and g.order_on >= 42
and cl.climb_type = 2
and asty.ascent_successful
- and not a.ascent_type_id = 6
- and g.order_on >= 42
- and amk.key in ('Sessions', 'Sessions (Approx)')
- and am.value ~ '^[0-9]+$'
- and am.value::integer < 6
+ and not a.ascent_type_id = 6

order by
g.grade_id desc
- ,am.value::integer
- ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
-
+ ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
3868 9th April 2026 22:42:55 UTC ben_sandi list Hard Boulder Problem Ascents list_definition
Before
select '<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber ,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb ,g.grade ,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date" from ascents a inner join climbers c on a.climber_id = c.climber_id inner join climbs cl on a.climb_id = cl.climb_id inner join grades g on cl.grade_id = g.grade_id inner join ascent_styles asty on a.ascent_style_id = asty.ascent_style_id where a.deleted_on is null and c.deleted_on is null and cl.deleted_on is null and a.exclude_reason is null and c.exclude_reason is null and cl.exclude_reason is null and g.order_on >= 42 and cl.climb_type = 2 and asty.ascent_successful and not a.ascent_type_id = 6 order by g.grade_id desc ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
After
select a.ascent_id as "#" ,'<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber ,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb ,g.grade as Grade ,am.value as Sessions ,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date" from ascents a inner join climbers c on a.climber_id = c.climber_id inner join climbs cl on a.climb_id = cl.climb_id inner join grades g on cl.grade_id = g.grade_id inner join ascent_styles asty on a.ascent_style_id = asty.ascent_style_id inner join ascent_meta am on a.ascent_id = am.ascent_id inner join ascent_meta_keys amk on am.ascent_meta_key_id = amk.ascent_meta_key_id where a.deleted_on is null and c.deleted_on is null and cl.deleted_on is null and a.exclude_reason is null and c.exclude_reason is null and cl.exclude_reason is null and cl.climb_type = 2 and asty.ascent_successful and not a.ascent_type_id = 6 and g.order_on >= 42 and amk.key in ('Sessions', 'Sessions (Approx)') and am.value ~ '^[0-9]+$' and am.value::integer < 6 order by g.grade_id desc ,am.value::integer ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
Diff
--- before

+++ after

@@ -1,7 +1,9 @@

select
- '<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber
+ a.ascent_id as "#"
+ ,'<a href="/climber/' || cast(c.climber_id as varchar) || '">' || c.climber_name || '</a>' as Climber
,'<a href="/climb/' || cast(cl.climb_id as varchar) || '">' || cl.climb_name || '</a>' as Climb
- ,g.grade
+ ,g.grade as Grade
+ ,am.value as Sessions
,pretty_dt(a.ascent_dt_start, a.ascent_dt_end) as "Ascent Date"

from
@@ -14,6 +16,10 @@

on cl.grade_id = g.grade_id
inner join ascent_styles asty
on a.ascent_style_id = asty.ascent_style_id
+ inner join ascent_meta am
+ on a.ascent_id = am.ascent_id
+ inner join ascent_meta_keys amk
+ on am.ascent_meta_key_id = amk.ascent_meta_key_id

where
a.deleted_on is null
@@ -22,11 +28,16 @@

and a.exclude_reason is null
and c.exclude_reason is null
and cl.exclude_reason is null
- and g.order_on >= 42
and cl.climb_type = 2
and asty.ascent_successful
- and not a.ascent_type_id = 6
+ and not a.ascent_type_id = 6
+ and g.order_on >= 42
+ and amk.key in ('Sessions', 'Sessions (Approx)')
+ and am.value ~ '^[0-9]+$'
+ and am.value::integer < 6

order by
g.grade_id desc
- ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
+ ,am.value::integer
+ ,order_dt(a.ascent_dt_start, a.ascent_dt_end)
+
3869 9th April 2026 16:46:40 UTC ben_sandi climb Wavelength notes_pretty
Before
None
After
<p>55-degree, overhung, wave-like sandstone feature.</p>
3870 9th April 2026 16:46:40 UTC ben_sandi climb Wavelength notes
Before
None
After
55-degree, overhung, wave-like sandstone feature.
Diff
--- before

+++ after

@@ -1 +1 @@

-
+55-degree, overhung, wave-like sandstone feature.
3871 9th April 2026 15:35:02 UTC ben_sandi ascent Jordan Cannon's ascent of Lurking Fear Partner
Before
None
After
3868
3872 9th April 2026 15:34:42 UTC ben_sandi ascent Michael Vaill's ascent of Lurking Fear Partner
Before
None
After
1299
3873 9th April 2026 15:34:20 UTC ben_sandi media https://www.instagram.com/reel/DKttE1YNfkN/ dt_pretty
Before
None
After
3874 9th April 2026 15:34:20 UTC ben_sandi media https://www.instagram.com/reel/DKttE1YNfkN/ embed_check_ok
Before
None
After
true
3875 9th April 2026 15:34:20 UTC ben_sandi media https://www.instagram.com/reel/DKttE1YNfkN/ embed_check_dt
Before
None
After
2026-04-08 23:14:04.685726+00
3876 9th April 2026 15:34:20 UTC ben_sandi media https://www.instagram.com/reel/DKttE1YNfkN/ missing_right_to_reproduce
Before
None
After
false
3877 9th April 2026 15:34:20 UTC ben_sandi media https://www.instagram.com/reel/DKttE1YNfkN/ embed_code
Before
None
After
<blockquote class="instagram-media" data-instgrm-permalink="https://www.instagram.com/p/DKttE1YNfkN/" data-instgrm-version="13" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/p/DKttE1YNfkN/" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;"> View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"></p></div></blockquote> <script async src="//www.instagram.com/embed.js"></script>
3878 9th April 2026 15:34:20 UTC ben_sandi media https://www.instagram.com/reel/DKttE1YNfkN/ url
Before
None
After
https://www.instagram.com/reel/DKttE1YNfkN/
3879 9th April 2026 15:34:20 UTC ben_sandi media https://www.instagram.com/p/DLG3qSwxRoF/ dt_pretty
Before
None
After
3880 9th April 2026 15:34:20 UTC ben_sandi media https://www.instagram.com/p/DLG3qSwxRoF/ embed_check_ok
Before
None
After
true

< Page 194 >