Android 如何对已计数的日志\ U条目设置条件限制?

Android 如何对已计数的日志\ U条目设置条件限制?,android,sql,sqlite,android-room,Android,Sql,Sqlite,Android Room,因此,我在我的android ROOM DAO中有一个查询,其中我收到了训练完成百分比,计算公式如下: 已完成训练集/总训练集*100 然而,我的问题是,总训练集是通过对特定训练的每次训练的总目标集求和来计算的 通过对每个日志条目的计数求和来计算完成的集合。因此,训练成功率有可能达到100% 此外,用户可以输入比特定练习的目标集多得多的集合。 我需要能够设置一个限制的数量日志条目,这是被计算为每个练习 日志条目表有一个junctionID,它对于每个练习都是唯一的 我怎样才能将此查询更改为只计算

因此,我在我的android ROOM DAO中有一个查询,其中我收到了训练完成百分比,计算公式如下:

已完成训练集/总训练集*100

然而,我的问题是,总训练集是通过对特定训练的每次训练的总目标集求和来计算的

通过对每个日志条目的计数求和来计算完成的集合。因此,训练成功率有可能达到100%

此外,用户可以输入比特定练习的目标集多得多的集合。 我需要能够设置一个限制的数量日志条目,这是被计算为每个练习

日志条目表有一个junctionID,它对于每个练习都是唯一的

我怎样才能将此查询更改为只计算每个练习的前3个logID,而忽略任何超过此值的内容

以下是我目前的查询:


我不确定我是否正确理解了您的需求,但您可以尝试这样的查询,也许您会得到主要想法并将其固定到您的用例中:

// FIRST PART - MOST CHANGES HERE
// AS a result you should get form there all exercises ID and logs (up to 3)
WITH 
entries AS 
(SELECT l.junction_id, 
    CASE  
     WHEN count(log_id) > 3 THEN 3
     ELSE count(log_id)
    END log_entry_count FROM log_entries_table AS l 
INNER JOIN exercise_workout_junction_table AS e ON e.exercise_workout_id = l.junction_id 
WHERE l.date IN (:dates) AND e.workout_id = :workoutID
GROUP BY junction_id)


// SECOND PART - IS THE SAME
sets AS ( SELECT sum(set_number) AS set_sum FROM exercise_workout_goals_table AS eg 
LEFT JOIN exercise_workout_junction_table ej ON ej.exercise_workout_id = eg.junction_id WHERE ej.workout_id = :workoutID)


// THIRD PART - LITTLE CHANGES
// Change here - sum up all the counts of entries (they already cut to 3 maximal)
SELECT ((SELECT SUM(log_entry_count) FROM entries) * 100/ 
(SELECT set_sum FROM sets)) AS workout_completion_pct

// FIRST PART - MOST CHANGES HERE
// AS a result you should get form there all exercises ID and logs (up to 3)
WITH 
entries AS 
(SELECT l.junction_id, 
    CASE  
     WHEN count(log_id) > 3 THEN 3
     ELSE count(log_id)
    END log_entry_count FROM log_entries_table AS l 
INNER JOIN exercise_workout_junction_table AS e ON e.exercise_workout_id = l.junction_id 
WHERE l.date IN (:dates) AND e.workout_id = :workoutID
GROUP BY junction_id)


// SECOND PART - IS THE SAME
sets AS ( SELECT sum(set_number) AS set_sum FROM exercise_workout_goals_table AS eg 
LEFT JOIN exercise_workout_junction_table ej ON ej.exercise_workout_id = eg.junction_id WHERE ej.workout_id = :workoutID)


// THIRD PART - LITTLE CHANGES
// Change here - sum up all the counts of entries (they already cut to 3 maximal)
SELECT ((SELECT SUM(log_entry_count) FROM entries) * 100/ 
(SELECT set_sum FROM sets)) AS workout_completion_pct