2017-08-24 4 views
0

これは複雑な問題であるか、私はちょっとしたことがほんとうに不足しているかどうかは分かりませんが、これを理解できません。MySQL - ある列でMAX()を使用し、残りの行からデータを返しますか?

私はエラーメッセージと、彼らが出演した時間を示す表があります。

id  created_at   content 
1  2017-08-05 08:00 ... 
2  2017-08-15 16:00 ... 
3  2017-08-15 16:01 ... 
4  2017-08-15 16:02 ... 
5  2017-08-25 16:00 ... 

Iグループこれらの行は、一緒に日付と時間に基づいており、登場どのように多くのエラーカウント:

SELECT DATE_FORMAT(created_at, '%d.%m. %h'), 
     COUNT(*) AS errorCount 
     FROM db.errorData 
     GROUP BY DAY(created_at), HOUR(created_at); 

結果のをこの内:

created_at   errorCount 
2017-08-05 08  1 
2017-08-15 16  3 
2017-08-25 16  1 

今すぐ使ってみたいMAX() o最高のerrorCountを取得します。私は副選択でこれを行う:

SELECT MAX(errorCount) AS errorMax 
     FROM(
     SELECT DATE_FORMAT(created_at, '%d.%m. %h'), 
     COUNT(*) AS errorCount 
     FROM db.errorData 
     GROUP BY DAY(created_at), HOUR(created_at) 
     ) alias; 

しかし、私はまた、ほとんどのエラーで一日の日付を取得したいです。単にcreated_atを最初のSELECTに追加するだけでは、最初の行の値しか返されないため、機能しません。

この作業を今すぐ行う方法がわかりません。あなたは私を助けることができます?あなたは、単にそれがエラーに関する問い合わせや注文の最後にlimit 1を追加することができます

+0

エラーが1日以上ある場合は、どのように結果を求めますか? –

答えて

1

を数えます。

SELECT DATE_FORMAT(created_at, '%d.%m. %h') AS created_at, 
     COUNT(*) AS errorCount 
    FROM db.errorData 
GROUP BY DAY(created_at), HOUR(created_at) 
ORDER BY errorCount DESC, created_at ASC 
LIMIT 1; 

同じerrorCountを持つ日数が多い場合は、特定の日を選択する必要があります。

私の上記の解決策は、最大のエラーで最も古い日を選択するだけです。

+0

私は、あまりにもデータを注文することを考えていなかった 'MAX()'の使用に集中していたと思います。私の場合、最新の日を取得することが理想的です。迅速な対応に感謝します! – Magnar

+0

@Magnar:最新の日は、私の答えに 'ASC'の代わりに' DESC'を使ってください –

1

は、レコードのカウントがあなたの望ましい結果をフェッチしますLIMITORDER BY句を追加し、

SELECT DATE_FORMAT(created_at, '%d.%m. %h'), 
    COUNT(*) AS errorCount 
FROM db.errorData 
    GROUP BY DAY(created_at), HOUR(created_at) 
    ORDER BY errorCount DESC 
LIMIT 1; 
0
SELECT 
DATE_FORMAT (created_at, '%d.%m. %h'), 
      count(*) as errorCount 
from 
db.errordata 
groupby day(created_at) 
HAVING errorCount>= ALL (
SELECT  
COUNT(*) AS errorCount 
FROM db.errorData 
GROUP BY DAY(created_at), HOUR(created_at) 
) 

これがあなたを助けてくれることを願っています。

関連する問題