簡體   English   中英

Android SQLite 獲得相對於其他列的最大值

[英]Android SQLite get maximum value with respect to other columns

我有一個名為“tracked_exercises”的表,其中包含附加圖片中顯示的列(exercise_name、band、reps、kgs)

我想創建一個查詢,給定一個運動名稱,返回所有具有該運動名稱的這些條件的所有行

  • 每個獨特樂隊的最大次數
  • 每次使用匹配帶的最大公斤數(但如果最大公斤數低於或等於更高次數的最大公斤數,則不會。因此,如果您有 2 次 6 公斤,3 次 6 公斤,我不希望 6 公斤后退 2 次)

因此,在示例圖像中,如果我給“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);

對不起,如果這不清楚,如果您需要更多信息,請發表評論

示例 tracked_exercises 表

另一個例子:

| 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獲得所有的最大值repskgs ,然后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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM