gpt4 book ai didi

python - Django 相当于 MySQL 中的 SELECT * GROUP BY

转载 作者:行者123 更新时间:2023-11-29 09:24:06 25 4
gpt4 key购买 nike

我在 Django ORM 中使用 .annotate().aggregate() 时遇到问题。

我的表结构:

-----------------------------------------------------
| id group_id date_time |
| ================================================= |
| 1 1 2020-01-25 19:51:46.603859 |
| 2 2 2020-01-24 18:40:24.301419 |
| 3 1 2020-01-25 20:14:11.123860 |
| 4 2 2020-01-25 05:20:21.507901 |
-----------------------------------------------------


//已编辑

我有以下 MySQL 查询:

SELECT m.*
FROM my_table m
JOIN (
SELECT group_id, max(date_time) as max_date
FROM my_table
GROUP BY group_id
) as s on m.group_id=s.group_id and m.date_time=s.max_date

返回:

-----------------------------------------------------
| id group_id date_time |
| ================================================= |
| 3 1 2020-01-25 19:51:46.603859 |
| 4 2 2020-01-24 18:40:24.301419 |
-----------------------------------------------------

我正在尝试将其转换为 Django ORM,这样我就可以获得完整的对象查询集。到目前为止我一直在使用这段代码:

unique_qs = MyModel.objects.filter(id__lte=50).values_list('group_id', flat=True).distinct()
unique_obj = []
for qs in unique_qs:
unique_obj.append(MyModel.objects.filter(group_id = qs).latest('date_time'))

但确实效率低下且耗时。您能给我一些关于如何实现这一目标的指导吗?

最佳答案

首先导入 Max 函数,如下所示:

from django.db.models import Max

然后,这就是您所需要的:

MyModel.objects.filter(id__lte=50).values('group_id').order_by('group_id').annotate(date_time_max=Max('date_time'))

关于python - Django 相当于 MySQL 中的 SELECT * GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59908803/

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