旅行調査データセットの前の行を参照する必要があるグループ化構造によってインデックスを計算しようとしています。自分が求めているものを取得するためのクエリの適切な構成を理解できず、コミュニティからの支援が必要です。私の旅行データセットは、TRIPNUM 列を除いて以下の形式になっています。TRIPNUM 列を次のようにしたいと考えています。または、TRIPNUM2 のように簡単な場合は、次のようになります。
UniqueID, PersonID, PlaceType, PlaceTpyeInt, TravelMode, TRIPNUM, TRIPNUM2
6001, 600, Home, 0, None, 0, 0
6002, 600, Store, 4, Car, 1, 1
6003, 600, Home, 0, Car, 0, 1
6004, 600, Store, 4, Car, 2, 2
6005, 600, Store, 4, Car, 2, 2
6006, 600, Home, 0, Car, 0, 2
6011, 601, Home, 0, None, 0, 0
6012, 601, Store, 4, Car, 1, 1
...等。
私が問題を抱えているのは、次のために必要な基準を作成する方法です。
- 調査回答者の出発と帰宅の別々のインスタンスとして旅行をカウントします
- 複数の経由地を同じルートとしてカウントする
- 次の調査回答者 (つまり、PersonID) に変更するときに TRIPNUM をリセットします。
これを行うには反復関数を記述する必要がありますか、または前の行を参照し、それが同じ PersonID であるかどうかを確認してから、前の行の TRIPNUM に基づいて値を割り当てる方法はありますか?
更新: このコード コンストラクトを実装しようとしましたが、これが一意の personid によって行をループする正しいループ コンストラクトであるかどうかはわかりません
CREATE OR REPLACE FUNCTION tripcounter(int) RETURNS TABLE AS
$BODY$
DECLARE
temptrip int;
uniqueid int;
personid int;
tripcount int;
BEGIN
FOREACH personid in $1
temptrip = 0
select uniqueid, perid, ptype, from $1
FOREACH uniqueid
CASE WHEN ptye = 1
THEN tripcount = 0
temptrip = temptrip + 1
ptype <> 1
THEN
tripcount = temptrip
END LOOP;
END;
LANGUAGE plpgsql;
ERROR: syntax error at or near "tripcount"
LINE 1: ...R REPLACE FUNCTION tripcounter(int) RETURNS TABLE tripcount(..