当前位置: 首页 > 面试题库 >

Django查询:如何从开始和结束时间字段中找到最大持续时间?

白学
2023-03-14
问题内容

这是我的Django模型:

class Shift(models.Model):
        worker = models.OneToOneField('Worker',null=True)
        date = models.DateField(null=True)
        shiftTime = models.CharField(max_length=10, default="N/A")
        timeIn = models.TimeField(null=True)
        timeOut = models.TimeField(null=True)

我需要找到一个在给定日期范围内在办公室花费最多时间的工人。如何从Django查询中的timeIn和timeOut字段计算持续时间?

编辑:我不想使用另一个属性 持续时间, 因为这似乎是多余的。除了使用原始查询或持续时间属性,还有其他方法吗?


问题答案:

Django
1.10引入了通过ORM本地执行日期/时间差异的功能。此查询将为您提供最长的转变:

from django.db.models import DurationField, ExpressionWrapper, F

longest_shift = Shift.objects.annotate(shift_length=ExpressionWrapper(
                                           F('timeOut') - F('timeIn'),
                                           output_field=DurationField()))\.
                                           order_by('-shift_length').first()

您可以根据需要filter()在之前添加一个子句,以针对特定日期范围添加过滤条件annotate()



 类似资料:
  • 我有这样的桌子 数据如下所示,开始时间和结束时间是连续的时间跨度: 因此,如果用户传递两个参数,则可以在任意时间段内选择* 它应该以如下方式返回表: 你看,棘手的部分是将原始的时间跨度削减到用户定义的时间跨度(@from-@To),我已经为此奋斗了一整天。请指教。 提前非常感谢你!!!

  • 我最近参加了一个面试,有人问我这个问题: 给定数组中的开始时间:及其持续时间 查找并返回任务完成的顺序。对于这个例子,结束时间是:,所以返回的值应该是。 我的方法/解决方案: 创建一个数据结构,将每个类表示为具有以下属性的任务对象: 开始时间 结束时间 持续时间 完成索引 然后根据每个对象的结束时间对数组进行排序。将每个元素与原始数组索引进行比较,并按原始任务顺序返回finish索引。 请提出更好

  • 我有一个enum,其值如下:,,等。 我试图编写一个方法,它接受并返回该时间段的开始和结束日期。 我研究了新的Java8类,该类可能需要一个开始时间和结束时间,但似乎没有任何干净的方法可以在之后检索这些值。 如果不使用(似乎是错误的数据结构)或一些难看的日期时间算法,我如何能一次干净地返回开始日期和结束日期?

  • 问题内容: 我在表中有此数据 每当FIELD_D中的值更改时,它就会组成一个组,而我需要该组中的最小和最大日期。查询应该返回 到目前为止,我看到的示例在Field_D中的数据是唯一的。这里的数据可以重复显示,首先是“ N”,然后变为“ P”,然后又回到“ N”。 任何帮助将不胜感激 谢谢 问题答案: 如果SQL实现支持分析功能,则可以使用LAG,LEAD和COUNT()OVER这样的解析函数,以发

  • 问题内容: 我有这样的时间戳字符串: 我想对它们进行排序,以便可以从上述时间戳获取起始范围和终止范围。我正在做如下: 这将为我提供上述时间戳列表的开始和结束范围。这是正确的方法还是有更好的方法? 更新资料 因此,我应该执行以下操作: 问题答案: 将那些ISO 8601 字符串解析为对象。 将这些日期时间对象添加到并排序。您可能想要诸如或。 java.time类实现该方法,以作为实现合同。因此,这些