sql - 复制最近位置

标签 sql sql-server

我有如下表

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

我已经厌倦了临时表。我可以使用单个查询来完成此操作吗?这是在实现过程中。我已经创建了许多临时表。

提前致谢。

最佳答案

试试这个:

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

现场测试:http://www.sqlfiddle.com/#!3/83a6a/7

关于sql - 复制最近位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10532323/

相关文章:

sql - 如何从 SQL Server 2008 中的 XML 文档中选择每个标签?

python - 从 Pandas 的 DataFrame 中的查询中选择行

sql-server,SQL 查询中的 IF 语句

SQL 服务器 : Use a column to save order of the record

SQL 查询奇怪的行为 : Never finishes when executing with two variables

mysql - 从 SQL 中的多对多关系中查找最大值

php - 在 mysqli 和 php 中与表 2 连接时从表 1 中获取不同的记录

sql - 如何在 SQL 2000/2005 中执行区分大小写的搜索和替换?

sql - 选择组中的最小值

c# - 重试命令/连接超时是否安全?