说我的模型看起来像:
class Action(models.Model):
user = models.ForeignKey('auth.User')
action = models.IntegerField(choices=ACTION_CHOICES)
when = models.DateTimeField()
我想让按用户分组的用户的所有操作都在15分钟之内。如果可能的话,最好是在django的ORM中,但如果没有别的办法,那么PostgreSQL的答案也不会错。
更多澄清:
我正在寻找的是如果a
和b
相隔13分钟,b
和c
相隔10分钟,{{1}即使a
和b
相隔23分钟,{}} c
和a
也会组合在一起。
答案 0 :(得分:1)
从您的示例中,我假设每个后续操作都将在排序的操作列表中的最后一个操作的15分钟内完成:
# sort by when in ascending order
actions = Action.objects.order_by('when')
group_dict = {}
action_list = []
count = 0
for action in actions:
if action_list:
diff = action.when - action_list[-1].when
if diff.seconds <= 900: # 15 minutes in seconds
action_list.append(action)
else:
group_dict[count] = action_list
action_list = [action]
count += 1
else:
action_list.append(action)
print group_dict
答案 1 :(得分:0)
您可以在操作上添加time_length字段,该字段将设置为自创建时的上一个操作以来的时间(如果它在您的窗口内),如果不是,则设置为NULL。然后在动作action_group上添加第二个字段,该组具有唯一的ID。然后在您的报告中,您可以只使用GROUP BY action_group。