我正在尝试通过必须引用旅行调查数据集中先前行的分组构造来计算索引。我想不出一个合适的查询结构来获得我所追求的东西,并希望得到社区的帮助。除了 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
...ETC。
我遇到的麻烦是如何创建必要的标准:
- 将旅行计为调查受访者离开和回家的单独实例
- 将多站行程计为同一行程
- 更改为下一个调查对象(即 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(..