Неправильное использование оконной функции LAG() произошло, когда я использовал функцию sum()
Магазины отключаются событиями BLOCK_EVENTS и включаются событиями UNBLOCK_EVENTS. Мое требование - активный диапазон магазина. Я привел ниже код, который я использую, но проблема заключается в том, что когда я хочу собрать все активные_периоды вместе, это дает ошибку.
# models.py
class PartnerEventHistory(models.Model):
partner_object = models.ForeignKey(InternetShop, on_delete=models.CASCADE, related_name='events')
event = models.CharField('رخداد', max_length=100, choices=EVENT_CH, null=True, blank=True)
date = models.DateTimeField('تاریخ ایجاد', db_index=True, auto_now_add=True)
запрос:
PartnerEventHistory.objects.filter(
event__in=PartnerEventHistory.BLOCK_EVENTS +
PartnerEventHistory.UNBLOCK_EVENTS
).order_by('partner_object', 'date').annotate(prev_event=Window(
expression=Lag('event'))).annotate(active_period=Case(
When(Q(event__in=PartnerEventHistory.BLOCK_EVENTS)
& Q(prev_event__in=PartnerEventHistory.UNBLOCK_EVENTS),
then=(F('date') - Window(Lag('date'))) /
(1000000 * 60 * 60 * 24)),
default=Value(0),
output_field=IntegerField())).order_by('partner_object').annotate(
total=Window(expression=Sum('active_period'),
order_by=F('partner_object').asc())).values(
'partner_object', 'cum_active_period')
ошибка:
OperationalError: misuse of window function LAG()