编辑:这是数据库的SQL小提琴:http://www.sqlfiddle.com/#!9/bf137/1
我已经对这个问题进行了长时间的搜索,我发现了类似的问题,这些问题在我的路上帮助了我,但是我不能靠自己的力量来实现这一目标。如果这是重复的话,请道歉!
我想要做的就是获取一个身体部位列表以及你锻炼的最后一天。所以基于workout.exercise和exercise.name加入两个表,按exercises.date排序,然后按exercise.area分组。
我只想按区域分组,并返回每个的最新(按日期字段)行。所以最近的胸部,肩部,腿部,背部锻炼都进行了。
我已经掌握了基础知识,但日期排序拒绝工作:
SELECT * FROM (
SELECT DISTINCT *
FROM workouts
WHERE user = 1
ORDER BY date DESC
) as workouts
JOIN (
SELECT name, area
FROM exercises
) exercises
ON workouts.exercise = exercises.name
GROUP BY area
如果您运行SQLFiddle,您将看到四个Back练习中的最后一个,组中不会返回最新的练习。理想情况下,我应该得到这个结果(删除了cols以便于阅读):
id date exercise name area
5 2015-03-18 13:30:00 Bench press Bench press Chest
1 2015-03-04 15:04:00 Front raises Front raises Shoulders
3 2015-03-16 21:08:00 Squats Squats Legs
8 2015-03-23 12:03:00 Lat pulldowns Lat pulldowns Back
答案 0 :(得分:2)
SELECT w.*
, e.*
FROM workouts w
JOIN exercises e
ON e.name = w.exercise
JOIN
( SELECT e.area
, MAX(w.date) max_date
FROM exercises e
JOIN workouts w
ON w.exercise = e.name
GROUP
BY e.area
) y
ON y.area = e.area
AND y.max_date = w.date;
(这可能不完全正确)
答案 1 :(得分:0)
您可以使用MAX
列上的date
功能:
SELECT MAX(w.date) date
, w.routine, w.exercise, e.area
FROM workouts w
INNER JOIN exercises e ON w.exercise = e.name
GROUP BY e.area;