SQL Sub查询,最大值的内部联接仅返回最大记录

时间:2016-01-11 16:53:32

标签: sql sql-server ms-access

我有一张包含服务票据调度数据的表。每个调度都有自己的ID。对于任何给定的服务票据,如果服务技术人员需要多次解决问题,他们可以拥有多个调度ID。我只关注LATEST发货ID记录的状态,对任何特定时间感兴趣。在Access中,我确实是勺子喂食,因为我所要做的就是进行一个在Service_Ticket_Id上分组的查询并带回最大的dispatch_ID。然后,我将该查询连接回原始调度表,并在dispatch_ID上使用内部联接,并仅撤回最新的调度记录。但是,我现在被迫在一个查询中执行此操作。以下显然搞砸了。我还需要将这个整体结果连接到显示技术名称等的另一个表格,尽管这不是绝对至关重要的。

SELECT 
    Max(dbo_SV_Service_Ticket_Dispatch.Dispatch_Id) AS MaxOfDispatch_Id,           
    dbo_SV_Service_Ticket_Dispatch.Service_Ticket_Id
FROM 
    dbo_SV_Service_Ticket_Dispatch
GROUP BY 
    dbo_SV_Service_Ticket_Dispatch.Service_Ticket_Id
INNER JOIN
    (SELECT 
         dbo_SV_Ticket_Dispatch.Dispatch_Time  
     FROM
         dbo_SV_Service_Ticket_Dispatch) ON dbo_SV_Service_Ticket_Dispatch.Dispatch_Id = MaxofDispatch_ID

2 个答案:

答案 0 :(得分:0)

通过使用子查询或使用CTE或临时表,有很多方法可以做到这一点。为简单起见,请尝试以下方法。

SELECT Max(Dispatch_Id) AS MaxOfDispatch_Id,Service_Ticket_Id into #t
FROM dbo_SV_Service_Ticket_Dispatch 
GROUP BY Service_Ticket_Id

SELECT Dispatch_Time from 
dbo_SV_Service_Ticket_Dispatch where Dispatch_Id= (select MaxOfDispatch_Id from #t)

答案 1 :(得分:0)

如果您只需要基于每个service_ticket_id的max dispatch_id发送的详细信息,您可以执行以下操作:

SELECT * FROM (
   SELECT MAX(dm.dispatch_Id) AS maxDispatchId, dm.Service_Ticket_Id
   FROM dbo_SV_Service_Ticket_Dispatch dm
   GROUP BY Service_Ticket_Id) m
INNER JOIN dbo_SV_Service_Ticket_Dispatch d ON d.dispatch_id = m.dispatch_id

<强>更新

要从故障单表中获取详细信息,只需将其加入故障单ID:

SELECT * FROM (
   SELECT MAX(dm.dispatch_Id) AS maxDispatchId, dm.Service_Ticket_Id
   FROM dbo_SV_Service_Ticket_Dispatch dm
   GROUP BY Service_Ticket_Id) m
INNER JOIN dbo_SV_Service_Ticket_Dispatch d ON d.dispatch_id = m.dispatch_id
INNER JOIN dbo_SV_Service_Ticket t ON t.Service_Ticket_Id = m.Service_Ticket_Id