我有两张桌子:
workouts
id, name, difficulty_level, rounds_count, some other columns...
1, 'a', 1, 1
2, 'a', 1, 5
3, 'a', 2, 1
4, 'a', 2, 5
5, 'b', 1, 1
6, 'b', 1, 5
7, 'b', 2, 1
8, 'b', 2, 5
trainings
id, user_id, workout_id, created_at, some other columns...
1, 1, 6, 2014-07-06
2, 1, 1, 2014-07-07
3, 1, 4, 2014-07-08
4, 1, 7, 2014-07-09
这是SQL小提琴这个数据:http://sqlfiddle.com/#!15/1d12d
我想为给定用户执行的每个锻炼名称找到“最难”的锻炼。 “最难”的意思是指具有最高难度级别的训练以及该难度级别的最高回合数。在上面给出的例子中,我应该获得带有ID 4和7的锻炼记录。
还有另一种可能的解决方法。每个给定锻炼名称找到“最难”锻炼的整个想法是防止为给定用户创建新训练,使其比已经执行的“更容易”锻炼。因此,假设它正常工作,给定锻炼名称的最后一次训练应始终指向目前为止“最难”的锻炼。
我正在使用PostgreSQL 9.3。
答案 0 :(得分:3)
select distinct on (user_id, name)
user_id, name, w.id as workout_id,
difficulty_level, rounds_count
from
workouts w
inner join
trainings t on t.workout_id = w.id
order by user_id, name, difficulty_level desc, rounds_count desc