第一篇文章所以请你好。 [SQL Server 2014]
我正在针对一个类似于下面的
的表运行selectselect
ExerciseCultures.Name,
max (convert (decimal (10,2), cast(weight as float))) as [Max Weight (KG)]
from workoutsessions
join ExerciseCultures on workoutsessions.ExerciseID
= ExerciseCultures.ExerciseID
group by ExerciseCultures.Name
返回31行,每个exerciseID对应一行,显示每个行的最高“权重”值。
我需要的是一个附加列,它还显示每个行的日期。日期列已经是每个行旁的workoutsessions表中的一列。
我尝试使用以下内容添加此日期列:
select
ExerciseCultures.Name,
max (convert (decimal (10,2), cast(weight as float))) as [Max Weight (KG)],
workoutsessions.date
from workoutsessions
join ExerciseCultures on workoutsessions.ExerciseID
= ExerciseCultures.ExerciseID
group by ExerciseCultures.Name,
workoutsessions.date
但是这会返回286行 - 父表中的所有行。我需要的是原始查询结果,只有他们各自的日期来自exercisesessions表。
有什么想法吗?
非常感谢
答案 0 :(得分:2)
;WITH CTE AS
(
SELECT e.Name,
CONVERT(DECIMAL(10,2),CAST(weight AS FLOAT))) [Max Weight (KG)],
w.[date],
RN = ROW_NUMBER() OVER( PARTITION BY e.name
ORDER BY CONVERT(DECIMAL(10,2),CAST(weight AS FLOAT))) DESC)
FROM workoutsessions w
INNER JOIN ExerciseCultures e
ON w.ExerciseID = e.ExerciseID
)
SELECT name, [Max Weight (KG)], [date]
FROM CTE
WHERE RN = 1
答案 1 :(得分:1)
SELECT A.NAME,
A.[max weight (kg)],
B.date
FROM (SELECT exercisecultures.NAME,
Max (CONVERT (DECIMAL (10, 2), Cast(weight AS FLOAT))) AS [Max Weight (KG)]
FROM workoutsessions
JOIN exercisecultures
ON workoutsessions.exerciseid = exercisecultures.exerciseid
GROUP BY exercisecultures.NAME) A
JOIN workoutsessions B
ON a.NAME = b.NAME
AND CONVERT (DECIMAL (10, 2), Cast(B.weight AS FLOAT)) =
A.[max weight (kg)]
答案 2 :(得分:1)
使用CROSS APPLY
SELECT
ExerciseCultures.Name,
ws.[weight],
ws.[date]
FROM ExerciseCultures
CROSS APPLY (SELECT TOP 1 [weight], [date]
FROM workoutsessions
WHERE ExerciseCultures.ExerciseID = ExerciseID
ORDER BY [weight] desc) ws