【问题标题】:Django : How to distinct by DateTimeField with ignoring the second / millisecond differenceDjango:如何通过忽略秒/毫秒差异来区分 DateTimeField
【发布时间】:2020-10-13 06:29:40
【问题描述】:

在 Django 中,我有一个看起来像这样的模型:

class Foo(models.Model):
   ...
   created = models.DateTimeField(default=None)
   ...

我尝试像这样查询:

q = Foo.objects.values('created').distinct()

到目前为止一切都很好。

问题是,如果我创建了相隔几秒或几毫秒的记录,我想将它们计为一条记录。

因此,只有相隔一分钟创建的查询才会作为两个单独的查询进行检索。 怎么做? 谢谢。

编辑: Trunc 是一个不错的选择,但没有准确回答问题。

举个例子:如果DB中有两条记录,在第一条记录中,created字段的值为:

2020-02-23 12: 19: 59.000000

第二个:

2020-02-23 12: 20: 01.000000

Trunc 将检索两条记录,因为它们是两个不同的分钟。

但我只想检索一条记录,因为两条记录之间的时间差不到一分钟..

【问题讨论】:

    标签: sql django django-models django-orm


    【解决方案1】:

    您可以使用 Django Trunc() 函数将其截断为您需要的分辨率:

    from django.db.models.functions import Trunc    
    
    Foo.objects.annotate(created_minute=Trunc('created','minute'))
         .values('created_minute').distinct()
    

    【讨论】:

      【解决方案2】:

      您可以使用 Trunc 带有分钟参数的数据库函数

      Trunc('field', 'minute') 
      

      【讨论】:

        【解决方案3】:

        感谢那些回答的人。

        在阅读他们的回答后的文档后,我想补充一点,Django 有一个内置的Trunc,用于不同类型的时间单位(新、天、小时、分钟等)

        例如:

        TruncMonthTruncDayTruncMinute

        所以在我的情况下,我可以使用Elisha 回答:

        from django.db.models.functions import Trunc
        Foo.objects.annotate(created_minute=Trunc('created','minute'))
         .values('created_minute').distinct()
        

        或者我可以写:

        from django.db.models.functions import TruncMinute
        Foo.objects.annotate(created_minute=TruncMinute('created'))
         .values('created_minute').distinct()
        

        另一个说明:Trunc 是一个不错的选择,但没有准确回答问题。

        举个例子:如果DB中有两条记录,在第一条记录中,created字段的值为:

        2020-02-23 12: 19: 59.000000
        

        第二个:

        2020-02-23 12: 20: 01.000000
        

        Trunc 将检索两条记录,因为它们是两个独立的分钟。

        但我只想检索一条记录,因为两条记录之间的时间差不到一分钟..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多