私は複雑な要件に問題があります。私はこれを解決するためにいくつかの助けを得ることができると考えています。私のSQL知識は非常に基本的なものであり、この問題の解決方法はわかりません。SQLで行を1つの行に結合する方法は?
ID | Name | Time | Event Type
----------------------------------------------------------
133000 | Elise | 2016-02-17 06:39:42.000 | Arrival
133000 | Elise | 2016-02-18 06:20:22.000 | Arrival
133000 | Elise | 2016-02-18 20:43:46.000 | Departure
133020 | Elise | 2016-02-19 06:29:46.000 | Arrival
133445 | Peter | 2016-02-01 20:09:00.000 | Departure
133445 | Peter | 2016-02-02 06:32:02.000 | Arrival
133445 | Peter | 2016-02-02 17:03:04.000 | Departure
133445 | Peter | 2016-02-02 19:44:06.000 | Arrival
133445 | Peter | 2016-02-02 19:56:56.000 | Departure
は今、私はそれがこのように構成されているような方法で、このデータを照会する:つまり
ID | Name | Arrival | Departure
----------------------------------------------------------
133000 | Elise | 2016-02-17 06:39:42.000 | NULL
133000 | Elise | 2016-02-18 06:20:22.000 | 2016-02-18 20:43:46.000
133000 | Elise | 2016-02-19 06:29:46.000 | NULL
133445 | Peter | NULL | 2016-02-01 20:09:00.000
133445 | Peter | 2016-02-02 06:32:02.000 | 2016-02-02 17:03:04.000
133445 | Peter | 2016-02-02 19:44:06.000 | 2016-02-02 19:56:56.000
を、私が持っている現在、私は次のように構造化さEvents
テーブルを持っています2つの新しい列:Arrival
とDeparture
次いで、テーブル内のそれぞれの人のために、時系列順に次のロジックを適用する:
Event Type
あるArrival
場合、それはArrival
列のTime
値と新しい行にマッピングされなければなりません。Event Type
がDeparture
の場合は、前の行もDeparture
であるかどうかを確認してください。その場合は、Departure
列のTime
値を持つ新しい行にマップする必要があります。Arrival
はnullです。そうでない場合は、Time
の値を前の行のDeparture
列に転送してください。
これはSQLクエリで実行できますが、機能は正常です。私はMS SQL Serverを使用しています。ありがとう!
私はサーバー'08にいるので、ラグの代わりに適用を使用するために少し変更しなければなりませんでした。しかし、これはまさに私が望んでいたものです。 – painiyff