Как я могу получить максимальное значение каждого тега по дням в диапазоне дат с помощью django

Я создаю ListAPIView с помощью DRF.

Вот пример данных.
Колонка DateAndTime измеряется за 10 секунд, диапазон 6/30-8/31.
К сожалению, DateAndTime является CharField. Потому что дизайн базы данных такой.

Я нарезал поле dateandtime и получил столбец slicedate, используя annodate и Substr.
. Я сделал это для того, чтобы сгруппировать по дням. все работает нормально.

Я хочу получить максимальное значение каждого тега по дням в диапазоне дат.
Максимальное значение дублируется, поэтому я хочу получить самое быстрое среди них.
Я думаю, что мой запрос в порядке, но я получаю ошибку.

пожалуйста, помогите мне!

DateAndTime             TagName        DataValue
2022-06-30 14:15:40    BW004_GD-4-16   99
2022-06-30 14:15:50    BW004_GD-4-16   25
2022-06-30 14:16:00    BW004_GD-4-16   99
2022-06-30 14:16:10    BW004_GD-4-16   50
2022-06-30 14:16:20    BW004_GD-4-16   99
2022-06-30 14:16:30    BW004_GD-4-16   99
.
.
.
2022-06-30 14:15:40    BW004_GD-4-17   50
2022-06-30 14:15:50    BW004_GD-4-17   40
2022-06-30 14:16:00    BW004_GD-4-17   25
.
.
.
2022-06-30 18:20:00    BW004_GD-4-17   50
2022-06-30 18:20:10    BW004_GD-4-17   50
2022-06-30 18:20:20    BW004_GD-4-17   10
.
.
.
2022-06-30 14:15:40    BW004_GD-4-18   30
2022-06-30 14:15:50    BW004_GD-4-18   40  
2022-06-30 14:16:00    BW004_GD-4-18   100
.
.
.  
# models.py
class EnvAi(models.Model):
    dateandtime = models.CharField(db_column='DateAndTime', blank=True, null=True)  # Field name made lowercase.
    tagname = models.CharField(db_column='TagName', max_length=50, blank=True, null=True)  # Field name made lowercase.
    datavalue = models.CharField(db_column='DataValue', max_length=50, blank=True, null=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'Env_AI'
# utils.py
def date_range(start=datetime.now().strftime("%Y-%m-%d"), end=datetime.now().strftime("%Y-%m-%d")):
    start = datetime.strptime(start, "%Y-%m-%d")
    end = datetime.strptime(end, "%Y-%m-%d")
    dates = [(start + timedelta(days=i)).strftime("%Y-%m-%d") for i in range((end-start).days+1)]
    return dates

# views.py
class EnvAiGasListAPI(ListAPIView):
    ## LOAD data range
    dates = date_range('2022-06-30', '2022-07-10') #EX) ['2022-06-30', '2022-07-01', '2022-07-02', '2022-07-03']

    queries = reduce(operator.or_, [Q(**{"dateandtime__startswith" : date}) for date in dates])
    # HERE!!!!!
    queryset = EnvAi.objects.values( 'datavalue', 'tagname').filter(queries)\
        .annotate(slicedate=Substr('dateandtime', 1, 10)).values('tagname', 'slicedate').annotate(max_value=Max('datavalue'))
ERROR:  column 'Env_AI.DateAndTime' must appear in the GROUP BY clause or be used in an   aggregate function 

Вот образец результата!

DateAndTime             TagName        DataValue
2022-06-30 14:15:40    BW004_GD-4-16   99
2022-06-30 14:15:40    BW004_GD-4-17   50 
2022-06-30 14:16:00    BW004_GD-4-18   100
.
.
.  
Вернуться на верх