使用JOIN获取最近的事件

时间:2014-04-30 14:58:43

标签: sql-server sql-server-2008 join limit

我有2个表,例如:

表1

ID,Name,Address1

表2

Visit_date,item,id

表2记录了大量访问次数,以及地址的ID。

我想编写一个查询,选择所有姓名和地址及其最后访问日期和项目。

SELECT * 
FROM (SELECT ID, NAME, ADDRESS FROM table1) as temp 
RIGHT JOIN table2 ON table1.ID = temp.ID;

到目前为止我已经到了。

2 个答案:

答案 0 :(得分:1)

您可以在CTE中使用ROW_NUMBER

;WITH cte AS (
    SELECT t1.name, t1.address1, t2.Visit_date, t2.item, 
        ROW_NUMBER() OVER (PARTITION BY t2.id ORDER BY t2.visit_date DESC) AS rn
FROM table2 t2
INNER JOIN table1 t1
    ON t1.id = t2.id
)
SELECT name, address1, visit_date, item
FROM cte
WHERE rn = 1

SQLFiddle proof

答案 1 :(得分:0)

这可能是cross-apply

的情况
select T1.ID, T1.Name, T1.Address1, T2.item, T2.Visit_date from
Table1 T1 cross apply (select top 1 * from Table2 where ID = Table1.ID 
order by     Visit_date desc) T2
相关问题