Сравнение данных недельной (или минутной) давности с помощью набора запросов в Django

У меня есть следующие данные:

class myModel(models.Model):
    date = models.DateTimeField
    user_ID = models.CharField
    index_a = models.CharField
    cnt_a = models.BigIntegerField
    cnt_b = models.BigIntegerField

Я хотел бы получить данные о результатах следующим образом:

date user_ID sum(n.cnt_a) sum(p.cnt_a)-5m sum(n.cnt_b) sum(p.cnt_b)-5m
2021-08-01 13:00 a10 7011 6625 9239 8766
2021-08-01 13:00 a20 6968 6628 9238 8765
2021-08-01 13:00 a30 6940 6646 9238 8766
2021-08-01 13:00 a40 6974 6644 9238 8764
2021-08-01 12:55 a10 6625 6621 8766 8692
2021-08-01 12:55 a20 6628 6580 8765 8691
2021-08-01 12:55 a30 6646 6596 8766 8693
2021-08-01 12:55 a40 6644 6614 8764 8692

Я попробовал выполнить SQL запрос следующим образом: и получил результат в виде приведенной выше таблицы

Я пытаюсь использовать queryset в Django для выполнения следующего запроса без использования необработанного SQL. есть идеи, как это можно сделать?

Заранее спасибо!

SELECT n.date, n.user_ID, sum(n.cnt_a), sum(p.C_AAA), sum(n.cnt_b), sum(p.C_BBB)
FROM myModel AS n
LEFT JOIN
(
    SELECT t1.date, t1.user_ID, t1.index_a, t1.cnt_a as C_AAA , t1.cnt_b as C_BBB
    FROM myModel AS t1
) AS p
ON p.date = DATE_SUB(n.date, INTERVAL 5 MINUTE) AND p.user_ID = n.user_ID AND p.index_a = n.index_b

Вы можете выполнять пользовательские sql-запросы напрямую.

В Django API вы можете использовать select_related для выполнения LEFT OUTER JOIN, или фильтрованных отношений

Примечание: `QuerySet` - это тип данных, возвращаемый Django API, это не инструмент.
Вернуться на верх