Request Tracker の使用状況に関するレポートを作成する任務を負っています。Request Trackerは、私が働いているいくつかの部門で使用するチケット システムです。これを行うために、その日に変更されたチケットに関する詳細のスナップショットを毎晩別のデータベースに取り込んでいます。このアプローチは、RT が使用する内部データベース スキーマからレポートを切り離します。
レポートに関する他の多くの質問の中で、部門ごとに毎月解決されたチケットの数を報告する必要があります。RT では、部門は CustomField として保存され、以下のクエリでわかるように、モデリングはその傾向に従います。ただし、毎晩スナップショットを取得しているため、1 つのチケットに複数の行があり、Department フィールドは 1 か月で変わる可能性があります。私は最新の部門フィールドにのみ興味があります。クエリでそれを取得する方法がわかりません。
「GROUP BY」を使用してクエリ結果をチケットごとに 1 つに減らすことができることはわかっていますが、そうすると、最後の部門設定を取得する方法がわかりません。部門はすべて文字列であるため、MAX() は最後のものを取得しません。MySQL では、選択しているフィールドに集計関数を使用する必要はありませんが、結果は不確定です (私のテストでは、私のバージョンの MySQL では最初の関数を取得する可能性があるようです)。
例として、2 つのチケットとすべての部門フィールド設定を示すクエリの結果を次に示します。
"ticket_num","date","QueueName","CF","CFValue","closed"
35750,"2009-09-22","IT_help","Department","",""
35750,"2009-09-23","IT_help","Department","",""
35750,"2009-09-24","IT_help","Department","",""
35750,"2009-09-25","IT_help","Department","",""
35750,"2009-09-26","IT_help","Department","",""
35750,"2009-10-02","IT_help","Department","",""
35750,"2009-10-03","IT_help","Department","",""
35750,"2009-10-12","IT_help","Department","",""
35750,"2009-10-13","IT_help","Department","",""
35750,"2009-10-26","IT_help","Department","Conference/Visitors","2009-10-26 10:10:32"
35750,"2009-10-27","IT_help","Department","Conference/Visitors","2009-10-26 10:10:32"
36354,"2009-10-20","IT_help","Department","",""
36354,"2009-10-21","IT_help","Department","",""
36354,"2009-10-22","IT_help","Department","FS Students",""
36354,"2009-10-23","IT_help","Department","FS Students",""
36354,"2009-10-26","IT_help","Department","FS Students","2009-10-26 12:23:00"
36354,"2009-10-27","IT_help","Department","FS Students","2009-10-26 12:23:00"
ご覧のとおり、両方のチケットは 26 日にクローズされ、最初に表示された数日間、両方のチケットの Department フィールドが空でした。以下にクエリを含めます。where ステートメントの後半で返される列の数を人為的に制限していることがわかります。
SELECT d.ticket_num, d.date, q.name as QueueName, cf.name as CF, cfv.value as CFValue, d.closed
FROM daysCF dcf
INNER JOIN daily_snapshots d on dcf.day_id = d.id
INNER JOIN Queues q on d.queue_id = q.id
INNER JOIN CustomFieldValues cfv on dcf.cfv_id = cfv.id
INNER JOIN CustomFields cf on cf.id = cfv.field_id
WHERE cf.name = 'Department' and (d.ticket_num = 35750 or d.ticket_num = 36354)
ORDER by d.ticket_num, d.date
そのクエリを変更して、10 月に「FS 学生」のチケットが 1 枚、「カンファレンス/ビジター」のチケットが 1 枚クローズされたことを示す結果セットを取得するにはどうすればよいですか?