【发布时间】:2018-04-02 12:27:42
【问题描述】:
我有一个 Django 模型,其中包含一条带有 date 的唯一记录。我目前正在将记录计入天数范围内,例如X 号码已经过了今天的日期,X 将在接下来的 10 天内发生,X 将在接下来的 30 天内发生。 下面的代码是我目前使用的代码,它从针对模型的 records.objects.all() 查询中提取所有值,然后循环遍历每个对象以计算日期时间增量并增加相关计数器。
for x in records:
if x.date is None:
missingValue += 1
else:
delta = x.date - date.today()
if delta.days < 0:
passed += 1
if delta.days < 10:
tenDays += 1
if delta.days < 30:
thirtyDays += 1
对于大约 50,000 条记录,这大约需要 5-6 秒,这比我希望的要长,我正在尝试减少此时间,因为记录数量可能会增加。 问题实际上是关于日期时间差异的性能计算和对结果天数进行分组,就好像有更好的方法通过 Django Query 或其他我找不到的方法,我愿意尝试它。
我已经探索过在原始 SQL 中使用 DateAdd,但它似乎需要我为每个日期范围查询数据库,并且仍然会导致我需要遍历结果。
【问题讨论】:
-
请准备rextester.com 演示与示例数据和所需的输出。我确信在纯 SQL 中我们可以得到低于 1 秒的时间。
-
rextester.com/AWPX46055 - 认为我做对了。期望的输出只是上述组返回的数字,在十天内,在三十天内通过。我还看到未来需要超过 30 天的任何东西。内日期是累积的。
-
感谢样本数据
标签: python sql-server django python-2.7 django-1.11