2

私は以下のようなテーブルを持っています

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

私は臨時雇用者のテーブルに疲れました。単一のクエリを使用してこれを実行できますか?これは実装の途中です。私はすでに多くの一時テーブルを作成しました。

前もって感謝します。

4

2 に答える 2

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;

m内部クエリには、最新のユーザーエントリを含むレコードが含まれます。この後、ユーザーの位置を取得するために、このビューに参加します。

ここでsqlfiddleテストを参照してください。

于 2012-05-10T10:44:10.917 に答える
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

ライブテスト:http ://www.sqlfiddle.com/#!3 / 83a6a / 7

于 2012-05-11T15:32:51.843 に答える