Фильтр по дате с разнесенными данными
У меня есть модель в django, которая содержит дату начала и окончания финансового года и значение объема спроса.
start_date = models.DateField(null=True)
end_date = models.DateField(null=True)
new_demand = models.PositiveIntegerField(default=0)
Я хотел бы отфильтровать эти данные по заданному диапазону дат, который может не совпадать с диапазоном дат в данных, взяв долю спроса из каждой точки данных, которая может попасть куда-то в диапазон дат фильтра. Я предполагаю, что мне нужно определить, попадает ли точка данных за край фильтра, и разделить спрос на количество дней внутри фильтра? Но у меня возникают трудности при попытке написать это. Любая помощь будет принята с благодарностью! :)
Если вам не нужно выполнять вычисления внутри базы данных, вы можете отфильтровать перекрывающиеся диапазоны дат (здесь показана хорошая картина того, когда диапазоны перекрываются) и выполнить вычисления в python при итерации по набору запросов:
for obj in MyModel.objects.filter(start_date__lte=end, end_date__gte=start):
overlap = min(end, obj.end_date) - max(start, start_date)
proportion = (obj.end_date - obj.start_date) / overlap
print(obj, "demand in overlapping range:", obj.new_demand * proportion)