Sql 从其他查询的已返回结果中选择记录
我正在表中维护车辆操作的历史记录,在执行查询以基于事务获取记录后,我希望根据类似条件从上述查询已返回的结果中选择记录 这是我使用的查询,感谢来自的@TimBiegeleisen 另外,我不能对当前查询使用类似的条件,因为它会影响返回的结果,这可能导致返回的结果不是我不想要的最新修改记录 我想我可以尝试以下方法,将其添加到当前查询的末尾,但我不确定这是否是最好的方法Sql 从其他查询的已返回结果中选择记录,sql,sql-server,Sql,Sql Server,我正在表中维护车辆操作的历史记录,在执行查询以基于事务获取记录后,我希望根据类似条件从上述查询已返回的结果中选择记录 这是我使用的查询,感谢来自的@TimBiegeleisen 另外,我不能对当前查询使用类似的条件,因为它会影响返回的结果,这可能导致返回的结果不是我不想要的最新修改记录 我想我可以尝试以下方法,将其添加到当前查询的末尾,但我不确定这是否是最好的方法 INNER JOIN Sites on Sites.Id = sd.Id AND Sites.Place LIKE '%LDN%
INNER JOIN Sites on Sites.Id = sd.Id AND Sites.Place LIKE '%LDN%'
sd是指第一个子查询的别名您可以始终使用子查询或CTE 子查询:
SELECT ....
FROM tblSites INNER JOIN (
SELECT TOP 1 WITH TIES HVeh.Id, HVeh.RefVehicleModel, HVeh.RefVehStatus, HVeh.ChangedDate
FROM HVeh
WHERE ChangedDate >= @X AND ChangedDate <= @Y
ORDER BY ROW_NUMBER() OVER (PARTITION BY HVeh.RefVehicleModel ORDER BY HVeh.ChangedDate DESC)) sd ON sd.Id = tblSites.id
WHERE tblSites.Location LIKE '%LDN%'
您始终可以使用子查询或CTE 子查询:
SELECT ....
FROM tblSites INNER JOIN (
SELECT TOP 1 WITH TIES HVeh.Id, HVeh.RefVehicleModel, HVeh.RefVehStatus, HVeh.ChangedDate
FROM HVeh
WHERE ChangedDate >= @X AND ChangedDate <= @Y
ORDER BY ROW_NUMBER() OVER (PARTITION BY HVeh.RefVehicleModel ORDER BY HVeh.ChangedDate DESC)) sd ON sd.Id = tblSites.id
WHERE tblSites.Location LIKE '%LDN%'
您可以使用子查询。但是,如果你要这样做,不要用TOP 1搭配领带。尽管该方法可行,但它并不是最有效的方法——基本上是因为它必须计算行数并对所有数据进行排序 因此,我建议:
SELECT . . .
FROM tblSites s INNER JOIN
(SELECT HVeh.Id, HVeh.RefVehicleModel, HVeh.RefVehStatus, HVeh.ChangedDate,
ROW_NUMBER() OVER (PARTITION BY HVeh.RefVehicleModel ORDER BY HVeh.ChangedDate DESC) as seqnum
FROM HVeh
WHERE ChangedDate >= @X AND ChangedDate <= @Y
) sd
ON sd.id = s.id AND seqnum = 1
WHERE s.Location LIKE '%LDN%';
如果希望结果按特定顺序排列,可以将order BY添加到外部查询。可以使用子查询。但是,如果你要这样做,不要用TOP 1搭配领带。尽管该方法可行,但它并不是最有效的方法——基本上是因为它必须计算行数并对所有数据进行排序 因此,我建议:
SELECT . . .
FROM tblSites s INNER JOIN
(SELECT HVeh.Id, HVeh.RefVehicleModel, HVeh.RefVehStatus, HVeh.ChangedDate,
ROW_NUMBER() OVER (PARTITION BY HVeh.RefVehicleModel ORDER BY HVeh.ChangedDate DESC) as seqnum
FROM HVeh
WHERE ChangedDate >= @X AND ChangedDate <= @Y
) sd
ON sd.id = s.id AND seqnum = 1
WHERE s.Location LIKE '%LDN%';
如果您希望结果按特定顺序排列,可以将order BY添加到外部查询。tblSites与第一次查询的结果有何关联?基于HVeh表格中的foreignkey ref站点,请将示例数据添加到您的问题中。就目前情况而言,这对未来的任何人都没有多大帮助。TBLSite与您第一次查询的结果有何关联?基于HVeh表中的foreignkey ref站点,请在您的问题中添加示例数据。就目前而言,这对未来的任何人都没有多大帮助。是的,这正是我所想的如何去做。。。!谢谢:是的,这正是我所想的如何去做的。。。!谢谢:
SELECT . . .
FROM tblSites s INNER JOIN
(SELECT HVeh.Id, HVeh.RefVehicleModel, HVeh.RefVehStatus, HVeh.ChangedDate,
ROW_NUMBER() OVER (PARTITION BY HVeh.RefVehicleModel ORDER BY HVeh.ChangedDate DESC) as seqnum
FROM HVeh
WHERE ChangedDate >= @X AND ChangedDate <= @Y
) sd
ON sd.id = s.id AND seqnum = 1
WHERE s.Location LIKE '%LDN%';