Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从其他查询的已返回结果中选择记录_Sql_Sql Server - Fatal编程技术网

Sql 从其他查询的已返回结果中选择记录

Sql 从其他查询的已返回结果中选择记录,sql,sql-server,Sql,Sql Server,我正在表中维护车辆操作的历史记录,在执行查询以基于事务获取记录后,我希望根据类似条件从上述查询已返回的结果中选择记录 这是我使用的查询,感谢来自的@TimBiegeleisen 另外,我不能对当前查询使用类似的条件,因为它会影响返回的结果,这可能导致返回的结果不是我不想要的最新修改记录 我想我可以尝试以下方法,将其添加到当前查询的末尾,但我不确定这是否是最好的方法 INNER JOIN Sites on Sites.Id = sd.Id AND Sites.Place LIKE '%LDN%

我正在表中维护车辆操作的历史记录,在执行查询以基于事务获取记录后,我希望根据类似条件从上述查询已返回的结果中选择记录

这是我使用的查询,感谢来自的@TimBiegeleisen

另外,我不能对当前查询使用类似的条件,因为它会影响返回的结果,这可能导致返回的结果不是我不想要的最新修改记录

我想我可以尝试以下方法,将其添加到当前查询的末尾,但我不确定这是否是最好的方法

 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%';