It’s probably possible to tweak how those read counts are counted to use the post_timings
table instead, similar to how “topics viewed” are calculated in this query (as opposed to posts_read, which suffers from the same issue, currently):
tv as (
select user_id,
count(distinct(topic_id)) as topics_viewed
from topic_views, t
where viewed_at > t.start
and viewed_at < t.end
group by user_id
),
(In addition a minimum on the time viewed to count as “read” could be factored in).
I realize this probably isn’t something that you’d want to “just do” since there are likely performance considerations to consider. Just thinking aloud about possible ways out in the future.