【问题标题】:Django query count unique NEW results per dayDjango 查询计数每天唯一的新结果
【发布时间】:2015-10-18 08:26:25
【问题描述】:

我将我的应用程序的统计信息保存在数据库中,该模型看起来像这样

class MyStats():
    event_code = django.db.models.PositiveSmallIntegerField()
    timestamp = django.db.models.DateTimeField()
    timestamp_date = django.db.models.DateField()
    device_id = django.db.models.CharField(max_length=32)

我想使用这些数据来确定我每天安装了多少新应用。

我已经做到了:

MyStats.objects.order_by('-timestamp_date').values('timestamp_date').annotate(count_total=Count('device_id', distinct=True))

但它似乎给我的是每天唯一用户的数量,这是不希望的。有什么提示吗?

【问题讨论】:

    标签: python django django-models django-queryset django-orm


    【解决方案1】:

    “新”真正的意思是“发生在x_timedelta之前”:

    import datetime
    
    x_timedelta = datetime.timedelta(days=1)
    
    x_timedelta_ago = datetime.datetime.now() - x_timedelta
    
    your_query = MyStats.objects.filter(timestamp_date__gt=x_timedelta_ago)
    
    your_query_distinct = your_query.order_by('-timestamp').annotate(count_total=Count('device_id', distinct=True)).values()
    

    【讨论】:

    • 没有。我指的是新的应用程序安装,而不是新的统计条目。所以还要考虑device_id的唯一性。
    • @tdma 上面的编辑更有意义吗?基本上只是为不同的值添加过滤器......
    • 不,您正在做的是过滤今天的独特用途。我正在寻找一种方法来获得唯一的 INSTALLS,这将是今天的唯一用途,减去过去已经生成记录的所有 device_id。
    • @tdma 当有人使用该应用程序时,这会覆盖初始时间戳吗?实现所需内容的最佳方法是使用 TimeStampedModel 之类的内容,并在所需日期范围内过滤 created 字段。如果你每次用户登录都覆盖时间戳,你如何区分今天第一次登录的用户和一周前登录然后今天再次登录的用户?
    • 没有被覆盖。追加新的统计数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2023-03-27
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多