在我的postgres表中,我有用户和他们拍照的时间。我想定义用户的不同轨道。首先,我说在同一个用户的3天内是相同的轨道,然后开始下一个轨道。我想在我的表中添加一列,我将保存该轨道的唯一编号。我已经弄明白了如何定义每个用户的开始和结束日期。但我不知道如何将其分为三天。
cur.execute("""SELECT users From table;""")
dbrows = cur.fetchall()
for k in set(dbrows):
cur.execute("""SELECT time From table where users ="""+k+""";""")
dbrows_time = cur.fetchall()
time_period = []
for i in dbrows_time:
new_date_time = datetime.fromtimestamp(int(i)).strftime('%Y-%m-%d %H:%M:%S')
new_date = new_date_time[0:10]
time_period.append(new_date)
period = len(set(time_period))
beginning = time_period[0]
end = time_period[-1]
beginning = datetime.strptime(beginning, "%Y-%m-%d")
end = datetime.strptime(end, "%Y-%m-%d")
delta=timedelta(days=3)
这里应该有一些循环"每三天创建一个新的唯一编号"。或者,当我在表中插入时,它应该在SQL中完成吗?
INSERT INTO table_tracks the number of each track
conn.commit()
我可以像这样每三个条目插入一些数字,但我不知道如何做三天的事情。
cur.execute("INSERT INTO table_track (id, users, link, tags, time, track, geom) select id, users, link, tags, time, ((row_number() over (ORDER BY users DESC) - 1) / 3) + 1, geom from table;""")
数据基本上采用以下形式:
user time geometry
1 1.03.2015 geometry
1 2.03.2015 geometry
......
2 01.03.2015 geometry
......
每个用户都有唯一的ID和我转换为日期时间格式的时间。期望的结果是:
user time geometry track_number
1 1.03.2015 geometry 1
1 2.03.2015 geometry 1
......
2 01.03.2015 geometry 15
......
track_number对于每个用户和每三天是唯一的。让我们说用户在3月1日,2日和3日拍摄照片,然后在4日,5日和6日拍照。这些将是不同的轨道(在真实的单词中可能不是理想的)。但是如果这些照片是在3月1日,2日和4日,5日,8日,那就特别有趣了。然后我会说这些应该是三个轨道:第1和第2,第4和第5和第8。所以我的意思是时间三天。如果三天内只有一张照片,那么它只有一首曲目。这样的事情。谢谢!! 任何想法或方向都非常感谢!