按月/年获取唯一身份访问者

时间:2016-05-10 09:44:37

标签: sql postgresql flask sqlalchemy flask-sqlalchemy

我有一个表格可以跟踪我的应用的所有网页浏览量。

class Tracking_visits(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users_user.id'), nullable=False)
    ts = db.Column(db.DateTime(timezone=True), default=datetime.datetime.utcnow().replace(tzinfo=pytz.UTC))

此代码可以很好地按月/年分组访问。

db.session.query(func.count(Tracking_visits.id), extract('month', Tracking_visits.ts).label('m'), extract('year', Tracking_visits.ts).label('y')).group_by('m', 'y').order_by('m', 'y').all()

现在我有另一个目标。我需要获得独特访问的总数。用户可以进行多次访问,但在这种情况下,我只对按月进行独特访问感兴趣。我怎么能这样做?

我读过有关func.distinct()的内容,但我不确定如何将其应用于上述查询。

1 个答案:

答案 0 :(得分:1)

您只需要更改.query参数,以便func.count()distinct()进行操作,Trackin_visits.user_id作为参数:

db.session.query(func.count(distinct(Tracking_visits.user_id)),
    extract('month', Tracking_visits.ts).label('m'),
    extract('year', Tracking_visits.ts).label('y'))
    .group_by('m', 'y')
    .order_by('m', 'y')
    .all()

可以在以下网站找到查询文档,如果向下滚动到Count(),您将找到以这种方式使用不同的示例:http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html#the-query-object