Django:使用条件引用聚合在同一个表中编写查询

时间:2013-03-30 13:09:33

标签: python sql django

我有一张类似的表:

id  name   added     count  flag
---------------------------------
01  abcd1  09.02.13    4    false
02  abcd1  10.02.13    1    true  
03  abcd1  11.02.13    3    false
04  abcd1  12.02.13    4    false

我需要在以下条件下找到给定名称的总和:

  • 对于给定名称
  • 旗帜应为假
  • 应在该名称的最后一个flag = true条目之后添加条目

在这种情况下,我想要条目03和04的总和。

我应该如何在Django中执行此操作?

修改
我正在寻找创建这样的查询:

SELECT id from sample
WHERE 
  name = 'abcd1' AND
  added > (SELECT MAX(added) FROM sample WHERE name = 'abcd1' AND flag = TRUE)

修改: 此外,如果没有带有flag = true的条目,那么我需要该名称的所有条目。

2 个答案:

答案 0 :(得分:1)

怎么样

select name, sum(count) as count
from T as t
where flag = 'false'
and exists (
    select 1
from T
where name = t.name
and flag = 'true'
group by name, flag
having max(added) < t.added
)
group by name

答案 1 :(得分:1)

如果你使用一个小子查询,这是相当简单的:

select
    name,
    sum(count)
from sample s
where flag = false
and (added > (select max(added)
    from sample
    where name = 'abcd1'
    and flag = true)
    OR
    not exists (
        select *
        from sample
        where name = 'abcd1'
        and flag = true)
    )
and name = 'abcd1'

注意当没有OR not exists的条目时,使用flag=true子句来处理这种情况。