1

次のようなテーブルがあります。

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

次の条件で、特定の名前のカウントの合計を見つける必要があります。

  • 特定の名前の場合
  • フラグは 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 のエントリがなかった場合、その名前のすべてのエントリが必要です。

4

2 に答える 2

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

于 2013-03-31T00:36:22.117 に答える
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
于 2013-03-31T00:17:37.803 に答える