0

したがって、3 つのテーブルを結合して作成した一時テーブルがあります。

  1. 旅行
  2. ストップ
  3. 停止時間

Stop_times テーブルには、trip_id、対応する停車地、およびそれらの停車地でのバスの予定到着時刻と出発時刻のリストがあります。

私はオンラインで検索しましたが、重複を削除する方法 (ctid、ネストされたクエリを使用) についての回答を見つけたようですが、それらを表示することはできませんでした。

私のクエリは次のようになります。

CREATE TEMP TABLE temp as
SELECT 
 (CASE st.arrival_time < current_timestamp::time     
 WHEN true THEN (current_timestamp::date + interval '1 day') + st.arrival_time     
 ELSE (current_timestamp::date) + st.arrival_time     
 END) as arrival,      
 CASE st.departure_time < current_timestamp::time     
 WHEN true THEN (current_timestamp::date + interval '1 day') + st.departure_time     
 ELSE (current_timestamp::date) + st.departure_time     
 END as departure,     st.trip_id, st.stop_id, st.stop_headsign,route_id,   t.trip_headsign, s.stop_code, s.stop_name,      s.stop_lat, s.stop_lon

 FROM schema.stop_times st     
 JOIN schema.trips t ON t.trip_id=st.trip_id     
 JOIN schema.stops s ON s.stop_id=st.stop_id

 order by arrival, departure;  

重複があることはわかっています(select *を実行し、tempでselect DISTINCTを実行することにより)、重複を特定する必要があるだけです...助けていただければ幸いです!

PS : DISTINCT を使用して重複を取り除くことができることはわかっていますが、クエリの速度が大幅に低下しているため、重複を特定する必要があるクエリを作り直す必要があります。結果のレコードは 200,000 を超えているため、それらをエクスポートしますExcelと重複のフィルタリングもオプションではありません(私は試しましたが、Excelはそれを処理できません)

4

1 に答える 1

0

これにより、必要なものが得られると思います:

SELECT arrival, departure, trip_id, stop_id, stop_headsign, route_id,
headsign, stop_code, stop_name, stop_lat, stop_lon, count(*)
FROM temp
GROUP BY arrival, departure, trip_id, stop_id, stop_headsign, route_id,
headsign, stop_code, stop_name, stop_lat, stop_lon
HAVING count(*) > 1;
于 2015-03-30T19:27:28.787 に答える