gpt4 book ai didi

python - Django - 获取每个查询结果的最新记录

转载 作者:行者123 更新时间:2023-11-29 21:53:14 25 4
gpt4 key购买 nike

我不确定这是否可以在单个查询中完成。我有一个如下所示的模型:

class TestStatus(models.Model):
id = models.AutoField(primary_key=True)
build = models.CharField(max_length=20)
test_name = models.CharField(max_length=50)
test_status = models.CharField(max_length=10)
test_start = models.DateTimeField(auto_now=True)
test_end = models.DateTimeField(null=True)

该表旨在存储针对给定内部版本号运行的自动化测试的结果。我想做的是查询所有测试及其针对给定构建运行的状态,但在某些情况下,同一测试会运行多次。此查询返回给定构建的所有测试:

TestStatus.objects.filter(build__exact='1.2.3.4')

但是如果相同的测试运行多次,那么我会得到如下结果:

-------------------------------------------------
| test_name | test_status | test_start |
-------------------------------------------------
| Test1 | FAIL | 2015-10-28 14:20:56 |
| Test2 | PASS | 2015-10-28 14:23:14 |
| Test1 | PASS | 2015-10-28 15:21:24 |
-------------------------------------------------

我要返回的只是最新的test_status对于每个 test_name针对给定的 build 运行。我知道我可以做 MAX()关于test_start字段,但仅返回单个条目,因为它正在查看查询集中所有字段的最大日期值。我可以执行一个查询,然后如果有任何失败的测试,则执行另一个查询以查看给定的 test_name 是否有更新的测试条目但如果可以的话,我宁愿避免执行多个查询。

我希望通过单个查询获得这样的输出:

-------------------------------------------------
| test_name | test_status | test_start |
-------------------------------------------------
| Test2 | PASS | 2015-10-28 14:23:14 |
| Test1 | PASS | 2015-10-28 15:21:24 |
-------------------------------------------------

我只针对给定的版本进行最新的测试运行。有什么想法吗?

编辑

以下是我尝试过的一些其他操作(第一个是由另一个答案建议的): TestStatus.objects.annotate(max_date=Max('test_start')).filter(test_start=F('max_date'), build='1.2.3.4')

但这会返回与执行 TestStatus.objects.filter(build='1.2.3.4') 相同的结果

我也一直在玩其他答案中发布的一些 SQL,但是当我尝试按 build 进行过滤时,这个查询(这似乎可以解决我的问题)什么也没有返回。 :

SELECT a.*
FROM test_status a
INNER JOIN(
SELECT test_name, MAX(test_start) AS max_date
FROM test_status
GROUP BY test_name) b
ON a.test_name = b.test_name
AND a.test_start = b.max_date
WHERE build = '1.2.3.4';

最佳答案

尝试:

tests = TestStatus.objects.filter(build__iexact='1.2.3.4',test_status=True).order_by('test_name','-test_start').distinct('test_name')

更新:刚刚看到 mysql 标签,distinct([*fields]) 仅适用于 PostgresSQL

关于python - Django - 获取每个查询结果的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com