我有一张类似的表:
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
我需要在以下条件下找到给定名称的总和:
在这种情况下,我想要条目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的条目,那么我需要该名称的所有条目。
答案 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
子句来处理这种情况。