帮助SQL查询

时间:2009-01-06 13:35:38

标签: sql-server-2005

有人可以帮我解决以下SQL命令吗?我对SQL不是很有经验。

我有两张桌子:

表格称重列:

  • WeighingId
  • FILEID
  • MyDateTime

包含列的表文件:

  • FILEID
  • 名称

表格称量包含称量指定文件时的信息。我需要列出单个文件的最后称量,按文件名分组。最后一个表包含Weighing.Id,文件名(File.Name)和上次MAX(Weighings.MyDateTime)时称量此文件的第二列。

可能存在具有不同File.Id的重复文件名,我需要对具有相同名称的所有文件进行分组(因此我无法对File.FileId进行分组)。

我试图使用此代码,但它不起作用:

SELECT W.WeighingId AS WeighingId, MAX(W.MyDateTime) AS MaxMyDateTime
FROM Files F INNER JOIN Weighings W ON W.FileId = F.FileId
GROUP BY F.Name
ORDER BY F.Name

感谢您的帮助, 彼得

5 个答案:

答案 0 :(得分:3)

SELECT F.Name, 
       MAX(W.MyDateTime) AS MaxMyDateTime
FROM Files F INNER JOIN Weighings W ON W.FileId = F.FileId
GROUP BY F.Name
ORDER BY F.Name

答案 1 :(得分:1)

“最后一个表格包含第一列,文件名(File.Name),第二列是上次MAX(Weighings.MyDateTime)时称量此文件。”

您的SQL将W.WeighingId作为第一列返回,而不是File.Name。

修复它,它应该可以工作。

答案 2 :(得分:0)

类似的东西:

select WeighingID
  , f.Name
  , f.FileID
  , MaxMyDateTime = (SELECT MAX(Weighings.MyDateTime) FROM Files F INNER JOIN Weighings ON Weighings.FileId = Files.FileId WHERE File.Name = f.Name)
from Weighings w
  inner join Files f
    on w.fileid=f.fileid

答案 3 :(得分:0)

我的appologies,我需要得到Weighing.Id的最后一次称重,所以决赛桌也应该包含Weighing.WeighingId。

答案 4 :(得分:0)

应该是:

SELECT 
    F.Name, 
    (SELECT TOP 1 WeighingId FROM Weighings WHERE MyDateTime = MAX(W.MyDateTime)),
    MAX(W.MyDateTime) AS MaxMyDateTime  
FROM Files F 
    INNER JOIN Weighings W ON W.FileId = F.FileId
GROUP BY F.Name
ORDER BY F.Name

您不需要F.Name在选择列表中(在您的示例中,不允许使用相反的WeighingId)。我想问题是如何聚合WeighingId来选择。