我正在尝试减少从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
答案 0 :(得分:1)
使用extra
功能:
IncomingData.objects.extra(where=['minute(utctime)=0'])