通过选择每个第N行减少Django查询的结果量

时间:2016-10-14 13:19:42

标签: mysql django

我正在尝试减少从mysql中的表中查询获得的事件数量,其中存储了大量事件。每分钟大约有一个事件,每个事件都有一个日期时间,然后是一些其他传感器读数。我想减少数据量,这样我每小时只能读一次。 我意识到我可以做类似的事情:

IncomingData.objects.filter(utctime__range=('2016-10-07', '2016-10-14'))[::60]

这会给我一小时一个事件(假设它们按时间排序?)但是这仍然是每小时从数据库返回60个事件。

我可能想要阅读更大的日期范围和更少的事件 - 例如一年中一天的一个事件,并且这种方法不起作用,因为它会读取数百万个不必要的行。

我见过一些使用ROWNUM的解决方案,但我想尽可能远离原始sql(例如https://dba.stackexchange.com/a/56389

我还尝试过以下操作,我原本以为每小时会返回第一个事件,但它会返回一个空的查询集:

IncomingHcData.objects.filter(utctime__minute=0)

它输出以下SQL作为生成的查询:

SELECT
  "incoming_hc_data"."uid",
  "incoming_hc_data"."utctime",
  "incoming_hc_data"."temp_1",
  "incoming_hc_data"."temp_2",
  "incoming_hc_data"."temp_3",
FROM "incoming_hc_data"
WHERE django_datetime_extract('minute', "incoming_hc_data"."utctime", GMT) = 0

1 个答案:

答案 0 :(得分:1)

使用extra功能:

IncomingData.objects.extra(where=['minute(utctime)=0'])