Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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,子查询错误存在一些问题,因为它希望提取多个结果: 完整查询: SELECT TOP 1000 Visit.BookingNumber AS 'Booking Number' ,Car.Name AS 'Car Name' ,Car.REGNumber AS 'REG Number' ,Type.Name AS 'Car Type' ,Car.[Length] ,Car.GrossTonnage ,Loc.Na

子查询错误存在一些问题,因为它希望提取多个结果: 完整查询:

 SELECT TOP 1000
       Visit.BookingNumber AS 'Booking Number'
      ,Car.Name AS 'Car Name'
      ,Car.REGNumber AS 'REG Number'
      ,Type.Name AS 'Car Type'
      ,Car.[Length]
      ,Car.GrossTonnage
      ,Loc.Name AS 'Space'
      ,CAST ( 
            CASE WHEN Loc.Name = 'Zone 6' or Loc.Name = 'Zone 7'
                THEN 'Terminal 2' ELSE 'Terminal 1'
                END AS nvarchar) AS 'Terminal'

      ,(SELECT  MIN (VisitMove.ActualStopDateUTC) FROM [CarDB].[dbo].[CarMovement] 

      INNER JOIN  dbo.Visit ON CarMovement.Visit_GUID = Visit.Visit_GUID 
      INNER JOIN dbo.Location AS Loc ON CarMovement.MovementToLocation_GUID = Loc.Location_GUID

      WHERE  Visit.Visit_GUID = CarMovement.Visit_GUID and CarMovement.MovementType_ID = '1' and  Loc.Name in ('Zone 8' , 'Zone 9' , 'Zone 7' , 'Zone 6') 
      GROUP BY CarMovement.Visit_GUID)AS 'Arrive Time'

      --,MAX (VisitMove.ActualStopDateUTC) AS 'Finish Time'

  FROM [CarDB].[dbo].[Visit] AS Visit 

  INNER JOIN dbo.Car AS Car ON Visit.Car_GUID = Car.Car_GUID
  INNER JOIN dbo.CarMovement AS CarMove ON Visit.Visit_GUID = CarMove.Visit_GUID
  INNER JOIN dbo.Location AS Loc ON CarMove.MovementToLocation_GUID = Loc.Location_GUID
  INNER JOIN dbo.CarType AS Type ON Car.CarType_ID = Type.CarType_ID

  WHERE Loc.Name in ('Zone 8' , 'Zone 9' , 'Zone 7' , 'Zone 6')

  GROUP BY 
  Visit.BookingNumber, 
  Car.Name, 
  Car.IMONumber, 
  Type.Name, 
  Car.[Length], 
  Car.GrossTonnage,
  Loc.Name, 
  Visit.Visit_GUID, 
  CarMove.MovementType_ID, 
 CarMove.ActualStopDateUTC
我遇到的子查询有问题:

(SELECT  MIN (VisitMove.ActualStopDateUTC) FROM [CarDB].[dbo].[CarMovement] 

  INNER JOIN  dbo.Visit ON CarMovement.Visit_GUID = Visit.Visit_GUID 
  INNER JOIN dbo.Location AS Loc ON CarMovement.MovementToLocation_GUID = Loc.Location_GUID

  WHERE  Visit.Visit_GUID = VisitMovement.Visit_GUID and CarMovement.MovementType_ID = '1' and  Loc.Name in ('Zone 8' , 'Zone 9' , 'Zone 7' , 'Zone 6') 
  GROUP BY CarMovement.Visit_GUID)AS 'Arrive Time'
我们的表设置是一个有一对多关系的访问表和车辆移动表一次访问可以有多个车辆移动我正在尝试创建两个子查询,只关注现在让一个子查询工作,从车辆移动列表中提取最早的停止日期和最晚停止日期,所有这些都基于访问guid。不幸的是,我认为我的子查询无法识别每个访问id仅一个字段/记录,而是试图将所有停止日期拉入表中。我通过自己运行查询来识别这一点,并将所有日期向后拉

有什么想法吗?

标量子查询中的GROUP BY非常可疑。基本上,它不应该存在。为什么?标量子查询最多可以返回一行。GROUPBY表示有多个组,因此有多行

因此,我建议:

(SELECT  MIN(VisitMove.ActualStopDateUTC)
 FROM [CarDB].[dbo].[CarMovement] INNER JOIN
      dbo.Visit
      ON CarMovement.Visit_GUID = Visit.Visit_GUID INNER JOIN
      dbo.Location AS Loc
      ON CarMovement.MovementToLocation_GUID = Loc.Location_GUID
 WHERE Visit.Visit_GUID = VisitMovement.Visit_GUID and 
       CarMovement.MovementType_ID = '1' and
       Loc.Name in ('Zone 8' , 'Zone 9' , 'Zone 7' , 'Zone 6') 
) as [Arrive Time]
我不是100%肯定这会解决你所有的问题。但这可能是其中之一。

我建议您使用外部应用

也就是说,从访问中获取一条记录,然后尝试查找按日期排序的前1条记录(如果有),否则为空

然后,您可以通过创建第二个“外部应用”按日期描述排序来对MAX Date执行相同的操作


这并不是所有的查询,只是一个如何将单个访问链接到移动的第一个访问的框架。问题是不需要子查询

这是我对记录进行分组的方法,因此我在前面的评论中说我收到了一些成对的记录

我将记录分组,查看唯一的ID

我的错:


谢谢你提供的一切帮助

此子查询位于选择列表中。除非它为每个外部记录返回一个值,否则您将得到一个错误。@TimBiegeleisen我已将查询中的联接更改为FULL outer,但它仍然返回相同的问题,我也尝试了选择Top 1,但它似乎以成对方式返回记录。您可能在我的注释中没有注意到这一点。我是说您的外部选择列表有一个子查询返回多条记录。这需要修正。你能把它更新为一个结果吗?@TimBiegeleisen我想看看互联网资源你指的是从select date1中选择Column1 column2,从carmove中选择date2,其中loc.name='zone 8'从subqueryHi Gordon中选择min,更近一步!它现在成对地返回记录,并将整个表中的第一个条目向后拉,并将其写入每个记录。我认为这取决于识别时间的正确访问guid,因为它似乎没有这样做…:/我试过在中写入它,但似乎出现了不正确的语法错误:“到达时间”附近需要ID或引用ID。尝试从外部应用中删除AS语句,但它会移动下面的内部连接。我建议从头开始,看看是否可以检索与属于carMovement的相应TOP 1记录连接的访问记录,然后从那里开始建造
SELECT V.*, MOVE.* FROM VISIT V
                OUTER APPLY 
                   (SELECT TOP 1 M.* CarMovement M 
                                       WHERE M.GUID = V.GUID 
                                         ORDER BY M.YourDate ASC) AS MOVE