有人可以帮我解决以下SQL命令吗?我对SQL不是很有经验。
我有两张桌子:
表格称重列:
包含列的表文件:
表格称量包含称量指定文件时的信息。我需要列出单个文件的最后称量,按文件名分组。最后一个表包含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
感谢您的帮助, 彼得
答案 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来选择。