address
あたりmin(dt)
ためrow_number()
とgroup by
の使用:
注:人は同じアドレス間を移動する場合、これは正しく動作しません。
select
Person_id
, dt = convert(char(10),dt,120)
, Address
from (
select
person_id
, dt = min(dt)
, address
, rn = row_number() over (partition by person_id order by min(dt))
from t
group by person_id, address
) s
where rn = 3
rextesterデモ:http://rextester.com/VLTUU16478
リターン:
+-----------+------------+---------+
| Person_id | dt | Address |
+-----------+------------+---------+
| 1 | 2016-07-16 | 2 |
| 2 | 2016-07-18 | 6 |
+-----------+------------+---------+
は人が同じアドレス間の移動のために正しくこれを解決するには、あなたはギャップ島問題に対処する必要があります。
select
Person_id
, dt = convert(char(10),dt,120)
, Address
from (
select
person_id
, dt = min(dt)
, address
, rn = row_number() over (partition by person_id order by min(dt))
from (
select
person_id
, address
, dt
, island = row_number() over (partition by person_id order by dt)
- row_number() over (partition by person_id, address order by dt)
from t
) s
group by person_id, address, island
) s
where rn = 3
rextesterデモ:http://rextester.com/PPIH49666
リターン:私たちは島によって識別し、グループができ、上記の溶液に、追加のサブクエリを追加
+-----------+------------+---------+
| Person_id | dt | Address |
+-----------+------------+---------+
| 1 | 2016-07-16 | 3 |
| 2 | 2016-07-18 | 5 |
+-----------+------------+---------+
完全には明らかではありません。解決策はありますか?ありがとう! – Ice
@Iceギャップと島の問題を解決するための2番目のソリューションで更新されました。 – SqlZim