Как выполнить ранговый запрос в 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')
если это не работает, дайте мне знать.