フォーラム: ヘルプ (スレッド #18428)

TracのDBから、チケット数を集計するSQLについて (2008-04-23 15:02 by yuroyoro #36249)

はじめまして。

ここで質問をしていいものか迷いましたが、
投稿させて頂きます。

現在、日別にチケットがどのくらい登録され、Closeされたかを
グラフ化するプラグインを開発しています。
そこで、tracのDBから下記の条件のデータを
SELECTする必要が出てきました。

1.指定日以前にOpenとなっていたチケット数
2.日別のNewまたはreopenedとなったチケット数
3.日別のClosedになったチケット数

こちらの情報(http://dev.ariel-networks.com/column/tech/tracreport-tips)を参考にして、
下記のようなSQLで取得しようと考えていますが、
もっといい方法がないか、識者の方に相談させて頂きたいと思います。

こんなSQLがいいとか、tracのAPIでできるとか
何か情報があれば、ご教授いただけないでしょうか?

///// SQL ////////////////////////

-- 指定日以前にOpenのチケット
SELECT sum(delta) AS count
FROM (
SELECT id,date(time,'unixepoch') tm,1 delta
FROM ticket
WHERE time < strftime('%s','2008-03-24')
UNION ALL
SELECT ticket id , date(time,'unixepoch') tm, (CASE newvalue WHEN 'closed' THEN -1 WHEN 'reopened' THEN 1 ELSE 0 END) delta
FROM ticket_change
WHERE field='status'
AND time < strftime('%s','2008-03-24')
ORDER BY tm ,id
)

-- 日別のNewまたはreopenedチケット
SELECT tm , sum(delta) AS count
FROM (
SELECT id,date(time,'unixepoch') tm,1 delta
FROM ticket
WHERE time >= strftime('%s','2008-03-24') AND time <= strftime('%s','2008-04-23')
UNION ALL
SELECT ticket id , date(time,'unixepoch') tm, (CASE newvalue WHEN 'reopened' THEN 1 ELSE 0 END) delta
FROM ticket_change
WHERE field='status'
AND time >= strftime('%s','2008-03-24') AND time <= strftime('%s','2008-04-23')
ORDER BY tm ,id
)
GROUP BY tm
ORDER BY tm ASC

-- 日別にClosedになったチケット数
SELECT tm , sum(delta) AS count
FROM (
SELECT ticket id , date(time,'unixepoch') tm, (CASE newvalue WHEN 'closed' THEN 1 ELSE 0 END) delta
FROM ticket_change
WHERE field='status'
AND time >= strftime('%s','2008-03-24') AND time <= strftime('%s','2008-04-23')
ORDER BY tm ,id
)
GROUP BY tm
ORDER BY tm ASC

RE: TracのDBから、チケット数を集計するSQLについて (2008-04-25 00:18 by okamototk #36266)

私もあまりSQLは詳しくありませんが、ちょっと質問させてください。

> ORDER BY tm ,id
> )
> GROUP BY tm
> ORDER BY tm ASC

上記のORDER BY tm, idのtmによるソートは必要ですか?
どっちみに最後のORDER BY tmでソートされるように思うのですが...


#36249 への返信

RE: TracのDBから、チケット数を集計するSQLについて (2008-04-25 22:01 by yuroyoro #36282)

> 上記のORDER BY tm, idのtmによるソートは必要ですか?
> どっちみに最後のORDER BY tmでソートされるように思うのですが...

ご指摘の通りです。

とりあえずですが、集計できるSQLを書くことができました。

っていうか、ticketテーブルとticket_chageテーブルを元に、
日毎の各チケットのステータスを復元しなければならないため、
かなり複雑なSQLになってしまいました…。
#36266 への返信