【问题标题】:Need help to solve complex sql query with django queryset需要帮助用 django queryset 解决复杂的 sql 查询
【发布时间】:2020-02-17 17:16:57
【问题描述】:

我需要帮助将 sql 查询转换为 django 查询集... 我已经尝试了很多事情,但没有什么可以解决它

下面的查询正是我需要的,它实际上给了我期望的结果。谁能帮我处理这个案子?

SELECT DISTINCT on (name) *
    FROM my_table
    WHERE (name, job_result_id) = ANY(
             SELECT name, max(job_result_id) 
             FROM my_table
             WHERE ticket != ''
             GROUP BY name, job_result_id)

一个典型的例子:

name          result     ticket     job_result_id

aaaa          pass                  1
aaaa          fail       MCB2       2
aaaa          fail       MCB3       3
bbbb          fail       MCB25      3
cccc          pass                  4
dddd          fail       MCB6       4

我的sql返回:

name          result     ticket     job_result_id

aaaa          fail       MCB3       3
bbbb          fail       MCB25      3
dddd          fail       MCB6       4

我总是想要最后一个 job_result_id 或带有票证的最新不同值。 也许如果有人对 sql 查询有更好的想法。我对讨论持开放态度。

感谢您的帮助

【问题讨论】:

  • 你能添加你的模型吗?你的预期结果是什么?
  • 我添加了一个示例,说明我的表格看起来如何以及我期望什么样的结果

标签: sql django postgresql django-queryset


【解决方案1】:

你可以试试这个:

YOU_MODEL.objects.filter(ticket__isnull=False).distinct('name').annotate(max_job_result_id=Max('job_result_id')).values('name', 'job_result_id', 'max_job_result_id')

【讨论】:

  • 感谢您的回复。我试过了,我得到了这个错误:annotate() + distinct(fields) 没有实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
相关资源
最近更新 更多