我有一个SQLite数据库,如下所示:
|ID|DateTime|Lang|Details|
|1 |16 Oct | GB | GB1 |
|2 |15 Oct | GB | GB2 |
|3 |17 Oct | ES | ES1 |
|4 |13 Oct | ES | ES2 |
|5 |15 Oct | ES | ES3 |
|6 |10 Oct | CH | CH1 |
我需要一个Django查询来选择它:
|1 |16 Oct | GB | GB1 | 2 |
|3 |17 Oct | ES | ES1 | 3 |
|6 |10 Oct | CH | CH1 | 1 |
因此,这是唯一(由Lang)最新(由DateTime)条目和出现次数(由Lang)。是否可以使用单个SQL或Django-ORM查询执行此操作?
答案 0 :(得分:0)
您可以同时使用Django annotate()和value():link。
当使用values()子句约束结果集中返回的列时,评估注释的方法略有不同。原始结果不是为原始QuerySet中的每个结果返回带注释的结果,而是根据values()子句中指定的字段的唯一组合进行分组。然后为每个唯一组提供注释;注释是在该组的所有成员上计算的。
您的ORM查询应如下所示:
queryset = Model.objects.values("Lang").annotate(
max_datetime=Max("DateTime"),
count=Count("ID")
).values(
"ID", "max_datetime", "Lang", "Details", "count"
)
答案 1 :(得分:0)
正如你想要" Lang" " DateTime"的最新条目,以下查询将帮助您,
queryset = Model.objects.distinct(" Lang")。order_by(" -DateTime")