我有理由相信这段代码可以做得更好,并且可能在查询开始时做更多的工作?
我会试着解释一下。
我的数据库中的每一行都有{1}}的1,2或3值,然后还有exercise
的数字可以是任意数字,但在此代码中我选择只关心对于1-12,所以此代码选择具有最高值rep
的行(这是一列并且每行都有一个值),其中kilograms
为1且exercise
为1,然后是2和3等等,最多12个,然后将rep
更改为2,再从1-12开始选择最上面的exercise
行。
这有意义吗?
kilograms
我使用SQL Server Compact,它不是MVC项目。
答案 0 :(得分:3)
您可以使用Group By
和MAX
汇总功能,只使用一个查询选择您感兴趣的所有行。
SELECT t.kg, t.rep, t.date
FROM Test t
INNER JOIN
(SELECT MAX(kg) as kg, exercise, rep
FROM Test
WHERE exerVariName = 'Comp'
GROUP BY exercise, rep) i
ON t.exercise = i.exercise AND t.rep = i.rep AND t.kg = i.kg
WHERE t.exerVariName = 'Comp'
内部查询仅执行一次。它会找到组标识符(exercise, rep)
元组和相应的最大kg
组值。
然后内部查询与Test
表连接,以获得行的“内容”(在您的情况下只有一个额外的字段date
)。
整体表现最佳。
您只需要迭代此查询的结果。
请参阅this topic。
编辑:
排除具有相同(rep, exercise)
的多个kg
记录(与OP的循环几乎相同)
SELECT kg, rep, exercise, MAX(date)
FROM
(SELECT t.kg, t.rep, t.exercise, t.date
FROM Test t
INNER JOIN
(SELECT MAX(kg) as kg, exercise, rep
FROM Test
WHERE exerVariName = 'Comp'
GROUP BY exercise, rep) i
ON t.exercise = i.exercise AND t.rep = i.rep AND t.kg = i.kg
WHERE t.exerVariName = 'Comp') t
GROUP BY t.kg, t.rep, t.exercise
答案 1 :(得分:0)
SELECT kg, rep, date, exercise, rep FROM Test test1 WHERE rep = (SELECT TOP 1 test2.rep FROM Test test2 WHERE test2.exercise = test1.exercise AND test2.rep = test1.rep ORDER BY kg DESC) GROUP BY exercise, rep
循环显示这些结果并显示它们。