使用SELECT(max)T-SQL返回额外列
第一个帖子,所以请友好。[SQL Server 2014] 我目前正在对一个表运行select,该表如下所示使用SELECT(max)T-SQL返回额外列,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,第一个帖子,所以请友好。[SQL Server 2014] 我目前正在对一个表运行select,该表如下所示 select ExerciseCultures.Name, max (convert (decimal (10,2), cast(weight as float))) as [Max Weight (KG)] from workoutsessions join ExerciseCultures on workoutsessions.ExerciseID
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
它返回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行-父表中的所有行。我需要的是workoutsessions表中的原始查询结果及其各自的日期
有什么想法吗
非常感谢交叉应用
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)]
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
权重的数据类型是什么?为什么要先将其转换为浮点数,然后再转换为十进制数?问一个合理的第一个问题做得很好,不是很多人会这样做@Lamak Weight是varchar,我很难将其直接转换为十进制,这是一个推荐的解决方案。@DanielAndré是的,ID在sessions表中多次出现,并带有不同的日期。@DanielAndréHi Daniel。我希望找到ID1的最大值并返回该行的日期。假设我有两行:ID1,12,01/01/2014和ID1,10,15/01/2014,它将返回第一行,因为12是该ID的最大值。这有意义吗?需要先将权重转换为数字。持有数字的字符串的顺序和数字本身非常不同。嗨,厄尔,非常感谢。我以前没有使用过交叉应用,所以我将进一步研究,但这似乎已经完成了一些调整,以转换权重列的技巧。虽然这突出了从char到decimal的转换非常混乱,但是要修复列输入并将其更改为更适合的数据类型。非常感谢。
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