1

私は次のクエリを持っています:

  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ますか?

4

1 に答える 1

3

MySQLには再帰機能がないため、NUMBERSテーブルのトリックを使用する必要があります-

  1. 増分数のみを保持するテーブルを作成します-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;
    
  2. 以下を使用してテーブルにデータを入力します。

    INSERT INTO NUMBERS
      (id)
    VALUES
      (NULL)
    

    ...必要な数の値に対して。

  3. 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
    
  4. 時間部分に基づいてデータのテーブルに左結合します。

       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
    
于 2010-07-28T23:32:59.270 に答える