0

私は自分のWebシステムにエラーを記録します。そこでは、人々はどこからでもログインでき、たとえば、共有しているものをダウンロードできます。家族の写真、ドキュメント++。

やり過ぎのシステムですが、開発者としては楽しいと思います:D

私のエラーテーブルでは、次の構造になっています。DataTime Userid(int)IP(varchar)ErrorMessage(text)

私のpersontableには、次の構造があります。Id(int)Firstname(varchar)Lastname(varchar)

異なるエラーごとにエラーの数を数えたいのですが...同じユーザーが複数のIPを持つことができ、1つのIPが複数のユーザーを持つことができるので、私は間違いを犯していると思います。SQLは次のとおりです。

SELECT TO_CHAR(DateTime, 'DD') DAY, 
       TO_CHAR(DateTime, 'MM') MONTH, 
       log.ErrorMessage, 
       CONCAT(CONCAT(person.lastname, ', '), person.firstname), 
       log.IP, 
       count(*) AS "COUNT"
  FROM errorlog log
  FULL JOIN person person
    ON log.Userid = person.Id
 WHERE log.DateTime BETWEEN foo 
                        AND foo2
 GROUP BY TO_CHAR(DateTime, 'MM'), 
          TO_CHAR(DateTime, 'DD'), 
          person.Lastname, 
          person.Firstname, 
          log.IP, 
          log.errormessage
ORDER BY MONTH ASC, 
         DAY ASC;

私のSQLは、異なるIP上の「離れた」同じ人物をグループ化している可能性があると思います。

4

2 に答える 2

3

節に人の名前と IP アドレスを含めたので、SELECT日付ごとの IP アドレスごとのエラー メッセージごとのエラー数が返されます。

日付ごとのエラー メッセージごとのエラー数だけが必要な場合は、クエリから人の名前と IP アドレスを省略します。

SELECT TO_CHAR(DateTime, 'DD') DAY,
       TO_CHAR(DateTime, 'MM') MONTH,
       log.ErrorMessage,
       count(*) AS "COUNT"
  FROM errorlog log
  WHERE log.DateTime BETWEEN foo
                         AND foo2
  GROUP BY TO_CHAR(DateTime, 'MM'),
           TO_CHAR(DateTime, 'DD'),
           log.IP,
           log.errormessage
ORDER BY MONTH ASC,
         DAY ASC;
于 2012-04-18T09:52:05.870 に答える
0

クエリはエラーの数を示しません。同じ日に同じ IP アドレスとユーザーに対して同じエラー メッセージが表示された回数を示します。ユーザーのリストとそれらのエラーの数が必要な場合、これは SQL (未テスト) です。

SELECT CONCAT(CONCAT(person.lastname, ', '),  person.firstname), 
log.IP, ISNULL(count(log.DateTime), 0) AS "COUNT"  
FROM person
LEFT OUTER JOIN errorlog log
ON person.Id = log.Userid
WHERE log.DateTime BETWEEN foo AND foo2  
GROUP BY person.Lastname, person.Firstname, log.IP
ORDER BY person.Lastname, person.Firstname, log.IP

それが何であるかを正確に指定していただければ、より多くのことをお手伝いできます。

于 2012-04-18T09:55:59.100 に答える