在内部加入中获得MAX结果?

时间:2017-11-03 19:40:39

标签: sql sql-server

我有两张桌子:TraceJobs和TraceRoutes。表结构如下所示:

TraceJobs:

            id    title
             --    -----
              1     trace 1
              2     trace 2

路由跟踪:

            id    tracejobs_id    hopnumber      url            RTT
             --    -------          ----------   --------           ---
              1       1               1          xyz123.contoso.com     1
              2       1               2          xyz124-2.contoso.com   5
              3       1               3          abc124-1.contoso.com   7
              4       1               4         abc124-1.contoso.com    10
              5       1               5          abc124-1.google.com    15
              6       1               6          abc1267-1.google.com   20
              7       2               1          xyz123.contoso.com     1
              8       2               2          xyz124-2.contoso.com   5
              9       2               3          abc124-1.contoso.com   7
              10      2               4         abc124-1.contoso.com    15
              11      2               5          abc124-1.google.com    17
              12      2               6          abc1267-1.google.com   20

TraceJobs表只跟踪我完成的所有traceroutes。 TraceRoutes表跟踪我完成的每个tracejobs中的traceroute。并且有一对多的关系。

我的目标是加入这些表格,以便我可以获得最高价值的RTT用于URL匹配" .contoso.com"。 这就是我想输出的样子......

            tracejobs_id    title           url                  RTT
            ----------    -------------    --------------    -------------
                     1    trace 1            contoso.com       10
                     2    trace 2            contoso.com       15

知道如何用SQL语句完成这个任务吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

你能用GROUP BY汇总吗?

SELECT t2.tracejobs_id, t1.title, 'contoso.com' as url, max(t2.rtt)
FROM tracejobs t1
    INNER JOIN traceRoutes t2 ON
         t1.id = t2.tracejobs_id
WHERE url like '%contoso.com'
GROUP BY tracejobs_id, title

答案 1 :(得分:0)

你可以使用max a group by

select r.tracejobs_id, j.title,  r.url,   max(r.RTT)
from TraceJobs j
inner join  TraceRoutes r on j.id = r.tracejobs_id
where r.url like ('%.contoso.com')
group by r.tracejobs_id, j.title,  r.url

答案 2 :(得分:0)

这样的事情应该有效

SELECT tj.id AS 'tracejobs_id', 
    tj.title, 
    'contoso.com' AS url, 
    MAX(tr.RTT) AS 'RTT'
FROM TraceJobs tj JOIN TraceRoutes tr 
    ON tj.id = tr.tracejobs_id
WHERE tr.url LIKE '%contoso.com%'
GROUP BY tj.id, tj.title;