如何编写SQL查询来提取日志数据

时间:2014-06-14 10:57:26

标签: sql sql-server

我有两张桌子。一个是包含主数据的主表。

一列包含唯一ID。第二个是日志表。

对于一个唯一ID(主表ID),日志表中有近3到4条记录。

我想获取主数据及其日志表数据(唯一ID的最高记录按降序排列)。

例如

主表

id      guid       desc      depid 
----------------------------- 
1       fg1          hii           1
2       h6           hoo          2 

日志表

id      guid   fromqueue     toqueue   status
-----------------------------------------------
1       fg1          1                        2                1
2       fg1          2                        3                2
3       h6           1                        4                2
4       h6           4                        5                3

例如,这里我想获取如下所示的数据

id     guid       desc      depid    status  
-----------------------------------------------
1      fg1          hii              1           2   
2      h6           hoo              2           3  

获得此结果的查询是什么?

2 个答案:

答案 0 :(得分:2)

这是一种方法:

select m.*, l.status
from master m join
     log l
     on m.guid = l.guid
where not exists (select 1
                  from log l2
                  where l2.guid = l.guid and
                        l2.id > l.id
                 );

对于性能,您需要log(guid, id)上的索引。这会将语句转换为:"从log表中获取具有相同guid且不高id的所有记录。"这相当于获取最后一条记录,假设id列是标识列。

答案 1 :(得分:1)

尝试这样的事情:

SELECT   master.id AS id, master.guid AS guid, desc, depid, MAX(status) AS status
FROM     master
JOIN     log ON master.id = log.id
GROUP BY master.id, master.guid, desc