3
ここで問題となるのは、SQLを使用して日付/時刻を使用して重複する入札を検出し、日付/時刻レコードの重複を検出し、SQLを使用して重複しているレコードを表示
テーブルやレコードを考えてみましょう:
-------------------------------------------------------------------
| person_id | bid_id | start_at | end_at |
-------------------------------------------------------------------
| 1 | 10 | 2016-10-30 09:00 AM | 2016-10-30 11:00 AM |
| 1 | 20 | 2016-10-30 10:00 AM | 2016-10-30 12:00 PM |
| 1 | 30 | 2016-10-30 05:00 PM | 2016-10-30 06:00 PM |
| 1 | 40 | 2016-10-30 11:45 AM | 2016-10-30 02:00 PM |
| 2 | 50 | 2016-10-30 07:00 PM | 2016-10-30 08:00 PM |
| 2 | 60 | 2016-10-30 07:00 PM | 2016-10-30 08:00 PM |
| 2 | 70 | 2016-10-30 09:00 PM | 2016-10-30 10:00 PM |
-------------------------------------------------------------------
所望の出力:
select b.person_id, b.bid_id, array_agg(b2.bid_id)
from bids b join
bids b2
on b2.person_id = b.person_id and
b2.end_at > b.start_at and
b2.start_at < b.end_at and
b2.bid_id <> b.bid_id
group by b.person_id, b.bid_id;
注重なり合う2つの期間のためのロジック:
--------------------------------------------
| person_id | bid_id | overlapping_bid_ids |
--------------------------------------------
| 1 | 10 | { 20 } |
| 1 | 20 | { 10, 40 } |
| 1 | 40 | { 20 } |
| 2 | 50 | { 60 } |
| 2 | 60 | { 50 } |
--------------------------------------------
Nitpicking: 'overlaps'演算子はPostgres固有ではなく、SQL標準の一部です。 –
ありがとう! –