2017-07-11 16 views
0

私はこのようになりますクエリを持っている:検索 - MySQLの

SELECT count(*), date_format(created, '%H:%i - %d/%m/%y') as 
datecreated 
FROM mimesi_realtime.served_clips 
where created > NOW() - INTERVAL 48 HOUR 
group by date_format(created, '%H - %d/%m/%y') 
order by min(created) ASC; 

それは基本的には最後の48で毎時間のカウントを行います時間とそれが時系列順に結果をソートし

問題は夜の間に、22時00から5:00の間に特に何のデータが登録されていないということであり、私はとにかく時間ごと

を示す、カウント0を必要とします

件数(*)

- 261, 20:00 - 11/04/17 
- 133, 21:00 - 11/04/17 
- 208, 22:00 - 11/04/17 
- 358, 5:00 - 12/04/17 
- 489, 6:00 - 12/04/17 

b)の予想結果:左の列
を作成したが、右1

a)は、実際の結果である

- 261, 20:00 - 11/04/17 
- 133, 21:00 - 11/04/17 
- 208, 22:00 - 11/04/17 
- 0, 23:00 - 11/04/17 
- 0, 24:00 - 11/04/17 
- 0, 1:00 - 12/04/17 
- 0, 2:00 - 12/04/17 
- 0, 3:00 - 12/04/17 
- 0, 4:00 - 12/04/17 
- 358, 5:00 - 12/04/17 
- 489, 6:00 - 12/04/17 

私はこれを行うことができる方法上の任意の方法はあります?

+0

何かを選択すると、一般的に同じことでグループ化する必要があります。詳細については、https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simpleを参照してください。 -sql-query – Strawberry

+0

昨日この問題を解決しましたか? https://stackoverflow.com/questions/45011431/find-missing-date-and-add-them-into-result-mysql –

+0

@EstebanP。私たちは何日も何ヶ月もしなかった。しかし、私は数時間と数週間それをやろうとしましたが、うまくいきません。 – GPecchio

答えて

1

問題の通常の解決策は、レポートに表示するすべてのタイムスタンプを含むカレンダーテーブルを作成することです。テーブルを作成できない場合は、インラインアプローチを使用できます。その後

(
    SELECT '2017-11-07 00:00:00' AS ts UNION ALL 
    SELECT '2017-11-07 01:00:00'  UNION ALL 
    ... 
    SELECT '2017-11-07 23:00:00' 
) t 

は、あなたの現在のテーブルにカレンダーのテーブルを結合し、類似したクエリを実行左:

SELECT 
    COUNT(t2.created), 
    DATE_FORMAT(t1.ts, '%H - %d/%m/%y') AS datecreated 
FROM calendar t1 -- possibly replace with inline table 
LEFT JOIN mimesi_realtime.served_clips t2 
    ON DATE_FORMAT(t1.ts, '%H - %d/%m/%y') = DATE_FORMAT(t2.created, '%H - %d/%m/%y') 
WHERE t1.ts > NOW() - INTERVAL 48 HOUR 
GROUP BY DATE_FORMAT(t1.ts, '%H - %d/%m/%y') 
ORDER BY MIN(t1.ts) 

あなたはカレンダーのテーブルで作業したくない場合は、別のオプションを持っていることであろう1時間ごとに1つのダミーレコードを書き込む予定のプロセスです。これは、あなたのテーブルにすべての時点が表示されることを保証します。無駄なスペースとセットアップに時間がかかるという欠点があります。

+0

ええ、私はそれについて考えましたが、問題は私がデータベースを変更することはできませんが、クエリを実行できるだけです。 – GPecchio

+0

@GPecchio問題ではありません。インラインカレンダーテーブルを使用して、関心のある期間にコードを生成することができます。 –

+0

私は過去48時間のデータが必要なので、インラインテーブルを動的にすることはできますか? – GPecchio