具有条件的sql-alchemy选择中的唯一元素

时间:2015-08-03 23:29:08

标签: python sql sqlalchemy greatest-n-per-group

我有一张名为votes的表,用于存储用户所做的投票。该表存储了user_id,group_id,投票的时间戳以及用户投票的item_id:

votes
------------
user_id
group_id
item_id
vote_datetime

我设置表格的方式意味着用户可以多次投票给同一个项目,这些投票之间的唯一区别就是日期时间。

我的问题是如何使用相同的group_id选择该表的所有元素,但条件是每个用户只计算一个项目的一个投票? 提前致谢 卡尔

编辑:这是一个开始。

选择group_id的所有元素等于1

allvotes = models.votes.query.filter_by(group_id = 1).all()

那么如何修改此项以确保用户无法对同一项投票两次?

1 个答案:

答案 0 :(得分:0)

您可以在(用户,组,项目)的组合上分配主键,如下所示:

query(user_id, group_id, item_id, func.min(vote_datetime)).
group_by(User_id, group_id, item_id)

如果您只想查询唯一投票,请将聚合函数与group:

一起使用
{{1}}

上面应该接近你需要的语法。