私は次のクエリを持っています:
SELECT timestamp,
COUNT(*)
FROM table
GROUP BY timestamp
ただし、データがないため、一部のタイムスタンプは表示されません。これが例です
1:00:00 | 3
1:00:02 | 17
1:00:03 | 2
1:00:01が欠落していることに注意してください。結果に表示させる方法はあり1:00:01 | 0
ますか?
私は次のクエリを持っています:
SELECT timestamp,
COUNT(*)
FROM table
GROUP BY timestamp
ただし、データがないため、一部のタイムスタンプは表示されません。これが例です
1:00:00 | 3
1:00:02 | 17
1:00:03 | 2
1:00:01が欠落していることに注意してください。結果に表示させる方法はあり1:00:01 | 0
ますか?
MySQLには再帰機能がないため、NUMBERSテーブルのトリックを使用する必要があります-
増分数のみを保持するテーブルを作成します-auto_incrementを使用して簡単に実行できます。
DROP TABLE IF EXISTS `example`.`numbers`;
CREATE TABLE `example`.`numbers` (
`id` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
以下を使用してテーブルにデータを入力します。
INSERT INTO NUMBERS
(id)
VALUES
(NULL)
...必要な数の値に対して。
DATE_ADDを使用して時間のリストを作成し、NUMBERS.id値に基づいて秒を増やします。
SELECT x.*
FROM (SELECT DATE_FORMAT(DATE_ADD('2010-01-01', INTERVAL n.id - 1 SECOND), '%T')
FROM numbers n) x
時間部分に基づいてデータのテーブルに左結合します。
SELECT x.ts AS timestamp,
COALESCE(COUNT(y.timestamp), 0) AS cnt
FROM (SELECT DATE_FORMAT(DATE_ADD('2010-01-01', INTERVAL n.id - 1 SECOND), '%T') AS ts
FROM numbers n) x
LEFT JOIN TABLE y ON y.timestamp = x.ts
GROUP BY x.ts