def unique_yearly():
stats = {}
col_year = func.extract('year', Scrobble.played_at)
year_from, year_to = db.session.query(func.min(col_year), func.max(col_year)).first()
year_from, year_to = int(year_from), int(year_to)
for year in range(year_from, year_to + 1):
time_from = datetime.datetime(year, 1, 1)
time_to = datetime.datetime(year, 12, 31, 23, 59, 59, 999999)
# select extract(year from played_at) as year, count(id) from scrobbles group by year;
scrobbles = (
db.session.query(Scrobble)
.filter(Scrobble.user_id == current_user.id)
.filter(Scrobble.played_at >= time_from, Scrobble.played_at <= time_to)
.count()
)
# select extract(year from played_at) as year, sum(1) from scrobbles group by year, artist;
unique_artists = (
db.session.query(Scrobble.artist)
.filter(Scrobble.user_id == current_user.id)
.filter(Scrobble.played_at >= time_from, Scrobble.played_at <= time_to)
.group_by(Scrobble.artist)
.count()
)
unique_tracks = (
db.session.query(Scrobble.artist, Scrobble.track)
.filter(Scrobble.user_id == current_user.id)
.filter(Scrobble.played_at >= time_from, Scrobble.played_at <= time_to)
.group_by(Scrobble.artist, Scrobble.track)
.count()
)
stats[year] = (scrobbles, unique_artists, unique_tracks)
stats = sorted(stats.items())
return render_template(
'stats/unique.html',
stats=stats
)
评论列表
文章目录