Предположим, у меня есть модель, в которой каждый раз выполняются транзакции, такие как:
class Transaction(models.Model):
timestamp = models.DateTimeField(auto_now_add=True)
price = models.DecimalField(max_digits=15, decimal_places=6)
vol = models.DecimalField(max_digits=15, decimal_places=6)
Я хочу написать запрос на django, который дает мне OHCLV (открытый, высокий, закрытый, низкий, объемный)значения для каждой минуты в определенной области.
Я написал запрос, подобный приведенному ниже:
window = {
'partition_by': [ExtractMinute('timestamp'),],
'order_by': F('id').asc()
}
Transaction.objects.\
annotate(
open_value=Window(
expression=FirstValue(
F('price'),),
**window),
closed_value=Window(
expression=LastValue(
F('price'),),
**window),
high_value=Window(
expression=Max(
F('price'),),
**window),
low_value=Window(
expression=Min(
F('price'),),
**window),
volume=Window(
expression=Sum(
F('volume')),
**window)).values(open_value, closed_value, high_value, low_value, volume)
Но я получил некоторые ошибки (You have an error in your SQL syntax
), также он не охватывает время, когда в таблице не было записи для этой минуты. Есть и другой способ использования группы в минуты времени, но он также не будет охватывать пустые времена ввода.
Пожалуйста, дайте мне предложение правильно написать этот запрос, я использую django 2.2.5 и mysql 14.14.