2009-01-06 115 views
0

有人可以帮我使用下面的SQL命令吗?我在SQL方面不是很有经验。SQL查询帮助

我有2个表:

表称量的列:

  • WeighingId
  • FILEID
  • MyDateTime

表文件的列:

  • FILEID
  • 名称

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

可以有不同的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 

感谢您的帮助, 切赫

+0

伙计们,看看我的答案。你不必接受它,但它确实解决了你的问题。语法可能不完美,因为我根据您的描述编写了它,但您应该可以调整它。 – wcm 2009-01-09 15:38:41

回答

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

“最终的表将包含与第一列一个文件名称(File.Name)和第二列当上次MAX(Weighings.MyDateTime)称重该文件。“

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

解决这个问题,它应该工作。

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 
0

我appologies,我需要,去年称量Weighing.Id,所以决赛桌也应包含Weighing.WeighingId。

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来选择。