Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SELECT(max)T-SQL返回额外列_Sql_Sql Server_Tsql_Sql Server 2014 - Fatal编程技术网

使用SELECT(max)T-SQL返回额外列

使用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

第一个帖子,所以请友好。[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 
        = 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