2011-06-27 18 views
0

サポートシステムで使用されているAPIに基づいて動作するPHPスクリプトを取得しようとしていますが、これを理解するには十分に熟練していません。2 MySQLのフィールドを比較

私がしなければならないことは、「アクション」値が「新しいサポートチケットが開かれました」を持つすべてのエントリをソートして検索し、「tid」を取って「新しいチケット応答made by XXX」XXXは「User」以外のものです。私が実行している問題は、実際にはその記述と一致する複数のエントリがあるかもしれないということですが、私は最初のものを探したいだけです。

私は、最初にサポートチケットに応答するのに要する平均時間を要約したグラフを表示したいと考えています。ここで

enter image description here

SQLの始まりです...

SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime 
FROM billing b1 inner join billing b2 
ON b1.tid = b2.tid 
WHERE b1.action='New Support Ticket Opened' 
AND b2.action LIKE 'New Ticket Response made by%' 
GROUP BY Tid 

すべてのヘルプは素晴らしいだろう!ありがとうございました。

+2

これはデザインが悪いように見えます。なぜ、「課金」テーブルに関連ユーザーのユーザーIDが直接格納されていないのでしょうか? –

+0

それ以外は、idがアクションを指定する方がずっと良いでしょう。 – hoppa

答えて

0

あなたはLIMIT句を使用する必要があります:「TID」を取り、XXXは「XXXによって作られた新しいチケット応答」の作用を有する対応するエントリを見つけ

SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime 
FROM billing b1 inner join billing b2 
ON b1.tid = b2.tid 
WHERE b1.action='New Support Ticket Opened' 
AND b2.action LIKE 'New Ticket Response made by%' 
AND b2.action != 'New Ticket Response made by User' 
GROUP BY Tid 
LIMIT 1 
0
SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime 
FROM billing b1 inner join billing b2 
ON b1.tid = b2.tid 
WHERE b1.action='New Support Ticket Opened' 
AND b2.action LIKE 'New Ticket Response made by%' 
AND b2.action != 'New Ticket Response made by User' //to filter "New Ticket Response made by User" 
GROUP BY Tid 
LIMIT 1 
0

SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime 
FROM billing b1 INNER join billing b2 
    ON b1.tid = b2.tid 
WHERE b1.action='New Support Ticket Opened' 
AND b2.action LIKE 'New Ticket Response made by%' 
AND b2.action <> 'New Ticket Response made by User' 
GROUP BY Tid 
: "ユーザー"

最も単純な以外は何も210

そして、あなたは、実際のユーザーを検索したい場合は.....

SELECT SUBSTR(b2.action, LENGTH('New Ticket Response made by ')) AS user, 
    b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime 
.... 

(LENGTH(「によって作られた新しいチケット応答」)が一定であるため、あなたはリテラルでそれを置き換える、より良いパフォーマンスを得られます整数)