Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL làm thế nào để điền ngày bị thiếu trong phạm vi?

MySQL không có chức năng đệ quy, vì vậy bạn chỉ còn cách sử dụng thủ thuật bảng NUMBERS -

  1. Tạo một bảng chỉ chứa các số tăng dần - dễ thực hiện bằng cách sử dụng 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. Điền vào bảng bằng cách sử dụng:

    INSERT INTO `example`.`numbers`
      ( `id` )
    VALUES
      ( NULL )
    

    ... cho bao nhiêu giá trị bạn cần.

  3. Sử dụng DATE_ADD để tạo danh sách ngày, tăng số ngày dựa trên giá trị NUMBERS.id. Thay thế "2010-06-06" và "2010-06-14" bằng ngày bắt đầu và ngày kết thúc tương ứng của bạn (nhưng sử dụng cùng một định dạng, YYYY-MM-DD) -

    SELECT `x`.*
      FROM (SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY)
              FROM `numbers` `n`
             WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) <= '2010-06-14' ) x
    
  4. THAM GIA TRÁI vào bảng dữ liệu của bạn dựa trên phần thời gian:

       SELECT `x`.`ts` AS `timestamp`,
              COALESCE(`y`.`score`, 0) AS `cnt`
         FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%m/%d/%Y') AS `ts`
                 FROM `numbers` `n`
                WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x
    LEFT JOIN TABLE `y` ON STR_TO_DATE(`y`.`date`, '%d.%m.%Y') = `x`.`ts`
    

Nếu bạn muốn duy trì định dạng ngày, hãy sử dụng Hàm DATE_FORMAT :

DATE_FORMAT(`x`.`ts`, '%d.%m.%Y') AS `timestamp`


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên Fedora 13

  2. CHỌN * NƠI KHÔNG TỒN TẠI

  3. Truy vấn MySql nâng cao:Cập nhật bảng với thông tin từ một bảng khác

  4. PDO ::__ construct ():Máy chủ đã gửi bộ ký tự (255) không xác định cho máy khách. Vui lòng báo cáo cho các nhà phát triển

  5. Lỗi nghiêm trọng:toán tử [] không được hỗ trợ cho chuỗi