我有如下表格
ID User Date Location
1 Tom 6-Mar-2012 US
2 Tom 4-Feb-2012 UK
3 Tom 6-Jan-2012 Uk
4 Bob 6-Mar-2012 UK
5 Bob 4-Feb-2012 UK
6 Bob 6-Jan-2012 AUS
7 Dev 6-Mar-2012 US
8 Dev 4-Feb-2012 AUS
9 Nic 6-Jan-2012 US
我必须让每个员工在同一张桌子上的最近位置。
ID User Date Location CurrentLocation
1 Tom 6-Mar-2012 US US
2 Tom 4-Feb-2012 UK US
3 Tom 6-Jan-2012 Uk US
4 Bob 6-Mar-2012 UK UK
5 Bob 4-Feb-2012 UK UK
6 Bob 6-Jan-2012 AUS UK
7 Dev 6-Mar-2012 US US
8 Dev 4-Feb-2012 AUS US
9 Nic 6-Jan-2012 US US
我厌倦了临时表。我可以使用单个查询完成此操作。这是在实施的中间。我已经创建了许多临时表。
先谢谢。
答案 0 :(得分:1)
<击> 撞击>
<击>select
id,
user,
date,
location,
first_value(location) over(partition by user order by date desc) as current_location
from your_table s;
击> <击> 撞击>
以上内容仅适用于Oracle。
这是我没有first_value分析函数的尝试:
select
a.id,
a.usr,
a.date,
a.location,
m.location as current_location
from
a
join
(select usr, location
from
(select usr,
location,
row_number() over(partition by usr order by date desc) as rnk
from a
)b
where rnk = 1) m
on m.usr = a.usr;
内部查询包含具有最新用户条目的记录。 在此之后,我使用此视图进行连接,以获取用户的位置。
参见here sqlfiddle test。
答案 1 :(得分:1)
试试这个:
select *, CurrentLocation
from tbl x
outer apply
(
select top 1 location as CurrentLocation
from tbl
where [user] = x.[user]
and id <= x.id
order by id
) y
order by id
输出:
ID USER DATE LOCATION CURRENTLOCATION
1 Tom 2012-03-06 US US
2 Tom 2012-02-04 UK US
3 Tom 2012-01-06 Uk US
4 Bob 2012-03-06 UK UK
5 Bob 2012-02-04 UK UK
6 Bob 2012-01-06 AUS UK
7 Dev 2012-03-06 US US
8 Dev 2012-02-04 AUS US
9 Nic 2012-01-06 US US