[英]Android SQLite get maximum value with respect to other columns
我有一个名为“tracked_exercises”的表,其中包含附加图片中显示的列(exercise_name、band、reps、kgs)
我想创建一个查询,给定一个运动名称,返回所有具有该运动名称的这些条件的所有行
因此,在示例图像中,如果我给“Muscle Up”,我会回来
| band | reps | kgs |
| red | 10 | 0 |
| purple | 15 | 0 |
| No | 5 | 0 |
| No | 4 | 10 |
| No | 2 | 15 |
我已经能够使用以下查询获得每个唯一波段的最大代表,但还没有设法解决如何获得最大公斤数的行
@Query("SELECT * FROM tracked_exercises INNER JOIN (SELECT band, MAX(reps) AS Maxreps FROM tracked_exercises WHERE exercise_name =:name GROUP BY band ) topset ON tracked_exercises.band = topset.band AND tracked_exercises.reps = topset.Maxreps")
List<TrackedExercise> getPersonalRecords(String name);
对不起,如果这不清楚,如果您需要更多信息,请发表评论
另一个例子:
| band | reps | kgs |
| No | 3 | 2.5 |
| No | 3 | 5 |
| No | 3 | 6.25|
| No | 10 | 0 |
| No | 9 | 0 |
| No | 4 | 5 |
| No | 4 | 3.75|
| red | 11 | 0 |
| red | 10 | 0 |
| No | 2 | 6.25|
我想要结果:
| band | reps | kgs |
| No | 10 | 0 |
| red | 11 | 0 |
| No | 3 | 6.25|
| No | 4 | 5 |
编辑:更新问题以使其更清楚
使用CTE
获得所有的最大值reps
和kgs
,然后NOT EXISTS
的结果:
with cte as (
select t.band, t.reps, t.kgs
from (
select *,
row_number() over (partition by band order by reps desc) rnreps,
row_number() over (partition by band, reps order by kgs desc) rnkgs
from tracked_exercises
) t
where t.rnreps = 1 or t.rnkgs = 1
)
select c.* from cte c
where not exists (
select 1 from cte
where band = c.band and reps > c.reps and kgs >= c.kgs
)
请参阅演示。
结果:
| band | reps | kgs |
| ---- | ---- | ---- |
| No | 10 | 0 |
| No | 4 | 5 |
| No | 3 | 6.25 |
| red | 11 | 0 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.