1

特定の月の毎日の統計を取得したい。ただし、テーブルに行がない日は結果に表示されません。データのない日を含めて、現在の日付までのすべての日を表示するにはどうすればよいですか?

これは私が今持っているクエリです:

SELECT DATE_FORMAT(FROM_UNIXTIME(timestamp), '%d'), COUNT(*)
FROM data
WHERE EXTRACT(MONTH FROM FROM_UNIXTIME(timestamp)) = 6
GROUP BY EXTRACT(DAY FROM FROM_UNIXTIME(timestamp))

だから私が持っているなら

Row 1 | 01-06
Row 2 | 02-06
Row 3 | 03-06
Row 4 | 05-06
Row 5 | 05-06

(説明のために、タイムスタンプの値を日/月の日付に変更しました)

出力する必要があります

01 | 1
02 | 1
03 | 1
04 | 0
05 | 2
06 | 0

...4 日目と今日 (6 日目) を無視する代わりに。

4

3 に答える 3

3

フォームで何かを行うには、カレンダー テーブルが必要です。

SELECT `date`, count(*)
FROM Input_Calendar c
LEFT JOIN Data d on c.date=d.date
GROUP BY `date`

私は自分のデータベースにカレンダー テーブルの完全なコピーを保持し、それを埋めるために WHILE ループを使用しましたが、 http://crazycoders.net/2012/03/のようなさまざまなソリューションに基づいて使用するために、オンザフライでデータを入力できます。 using-a-calendar-table-in-mysql/

于 2013-06-06T13:51:26.123 に答える
0

時間ディメンションを作成します。これは標準的な OLAP レポート トリックです。ただし、OLAP トリックを実行するためにキューブは必要ありません。インターネットでスクリプトを見つけてカレンダー テーブルを生成し、そのテーブルに参加するだけです。

また、クエリに WHERE 句がないと思います。

その他の便利なトリックには、1 から N までの数字のリストである「Tally」テーブルの作成が含まれます。ここで、N は通常、データベース管理システムの bigint の最大値です。

私は MySQL の第一人者ではないので、ここではコードを提供しません。

擬似コードは次のとおりです。

Data left join TimeDimension on data.date = timedimension.date から * を選択

于 2013-06-06T13:49:35.947 に答える