SQL查询帮助
问题描述:
有人可以帮我使用下面的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
感谢您的帮助, 切赫
答
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
答
“最终的表将包含与第一列一个文件名称(File.Name)和第二列当上次MAX(Weighings.MyDateTime)称重该文件。“
您的SQL会将W.WeighingId作为第一列回退,而不是File.Name。
解决这个问题,它应该工作。
答
喜欢的东西:
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
答
我appologies,我需要,去年称量Weighing.Id,所以决赛桌也应包含Weighing.WeighingId。
答
应该为:
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来选择。
伙计们,看看我的答案。你不必接受它,但它确实解决了你的问题。语法可能不完美,因为我根据您的描述编写了它,但您应该可以调整它。 – wcm 2009-01-09 15:38:41