Django中每个类型/代理的最新行

gev0vcfq  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(96)

我有一个表格,里面有很多数据。这个表是由一些脚本编写的。它的工作原理类似于“签入”,每个代理都在某个时间段内签入。它看起来像下面。
| ID|剂|地位|时间戳|
| --|--|--|--|
| 1 |汤姆|好|2023-03-16 12:27:03|
| 2 |杰夫|退化|2019 -08- 21 00:01:13|
| 100 |汤姆|好|2023-10-03 12:00:00|
| 101 |杰夫|好|2023-10-03 11:59:00|
我想为每个探员挑选最新鲜的台词。所以在上面的例子中,我想得到100和101行。
我尝试了很多方法,但仍然没有得到我想要的。我使用MySQL,所以这次不适合我。一方面,有一种方法可以为每个代理创建不同的值,如下所示:

AgentCheckin.objects.all().values('agent').distinct()

但这只是一个探员的名字。我需要得到整个查询集的所有信息。我认为这种用例在多个Web应用程序中应该是常见的,但在这里看起来是这样的,它在最终答案中并不常见。
产品型号:

class AgentCheckin(models.Model):
    agent = models.CharField(max_length=32)
    agent_version = models.CharField(max_length=16)
    status = models.CharField(max_length=16)
    log = models.TextField(blank=True)
    host = models.CharField(max_length=64)
    timestamp = models.DateTimeField(default=timezone.now)
jobtbby3

jobtbby31#

任何数据库都可以使用的东西是:

from django.db.models import Exists, OuterRef

AgentCheckin.objects.filter(
    ~Exists(
        AgentCheckin.objects.filter(
            agent=OuterRef('agent'), timestamp__gt=OuterRef('timestamp')
        )
    )
)

因此,如果存在具有相同的agent和更近的时间戳的AgentCheckin,则我们过滤掉AgentCheckin

相关问题