Сравнение данных недельной (или минутной) давности с помощью набора запросов в 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
, или фильтрованных отношений