Как выполнить ранговый запрос в Django

Я застрял на этом этапе, и этот запрос кажется мне немного сложным. Итак, в основном я получаю данные от устройств через периодические интервалы времени, скажем, 3 часа

Но каждое устройство отправляет данные дважды на каждом интервале (3 часа), мне нужно извлечь данные, которые отправляются последними (в интервалах)

"date": "2021-11-28",
        "time": "12 : 35",
        "meter": "70F8E7FFFE10C495",
       
        "dr": 3,
        "date_received": "2021-11-28T18:05:20.473430+05:30",
       
    },
    {
        "id": 2,
        "date": "2021-11-28",
        "time": "12 : 37",
        "meter": "70F8E7FFFE10C459",
       
        "date_received": "2021-11-28T18:07:09.980403+05:30",
   
    },
    {
        "id": 3,
        "date": "2021-11-28",
        "time": "12 : 37",
        "meter": "70F8E7FFFE10C459",
       
        "dr": 3,
        "date_received": "2021-11-28T18:07:11.533388+05:30",
      
    },
    {
        "id": 4,
        "date": "2021-11-28",
        "time": "12 : 50",
        "meter": "70F8E7FFFE10C463",
       
        "date_received": "2021-11-28T18:20:44.197284+05:30",
       
    },
    {
        "id": 5,
        "date": "2021-11-28",
        "time": "12 : 56",
        "meter": "70F8E7FFFE10C47D",
     
        "date_received": "2021-11-28T18:26:43.221316+05:30",
      
    },
    {
        "id": 6,
        "date": "2021-11-28",
        "time": "12 : 56",
        "meter": "70F8E7FFFE10C47D",   <---- only want to get this occurrence 
      
        "date_received": "2021-11-28T18:26:44.925292+05:30",
     
    },

Итак, если device : 70F8E7FFFE10C459 отправляет данные дважды, я хочу получить только последние отправленные данные, и для этого нужен obj в queryset, мне говорили о концепции RANK, но я не понимаю, как применить ее здесь

class MeterData(models.Model):
    meter = models.ForeignKey('dashboard.Meter',on_delete=models.SET_NULL,null=True)
    customer = models.ForeignKey('Customer',on_delete=models.SET_NULL,null=True,blank=True)
    battery  = models.CharField(max_length=40,null=True,blank=True)
    crc_status = models.CharField(max_length=43,null=True,blank=True)
    Pulse_count = models.IntegerField(null=True,blank=False)
    status_data = models.CharField(max_length=50,blank=True,null=True)
    status_magnet_temper = models.BooleanField(default=False)
    meter_reading = models.CharField(max_length=50,null=True,blank=True)
    status_switch_temper = models.BooleanField(default=False)
    status_voltage_level = models.CharField(max_length=10,null=True,blank=True)
    uplink_type = models.CharField(max_length=50,null=True,blank=True)
    confirmed_uplink = models.BooleanField(max_length=50,null=True,blank=True)
    tx_info_frequency = models.CharField(max_length=50,null=True,blank=True)
    dr = models.IntegerField(null=True,blank=True)
    date_received = models.DateTimeField(auto_now_add=True,null=True)

Не работает на Sqlite

Я думаю, что следующий запрос является правильным ответом.

MeterData.objects.filter(put_your_filters_here).order_by('-date_received').distinct('customer_id')

если это не работает, дайте мне знать.

Вернуться на верх