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

MySQL GROUP BY và điền vào các hàng trống

Trong câu trả lời này, tôi sẽ trình bày cách tạo các bảng lịch của bạn.

Tạo ba bảng cho ngày, giờ và phút:

CREATE TABLE days (
  day DATE,
  PRIMARY KEY (day)
) 
CREATE TABLE hours (
  hour INT,
  PRIMARY KEY (hour)
) 
CREATE TABLE minutes (
  minute INT,
  PRIMARY KEY (minute)
) 

Điền vào bảng giờ với các số từ 0 đến 23 và bảng phút với các số từ 0 đến 59. Để điền vào bảng ngày, bạn có thể tạo một quy trình như sau:

CREATE PROCEDURE make_days(IN start_date DATE, IN end_date DATE)
BEGIN
  DECLARE curr_date DATE;
  SET curr_date = start_date;
  WHILE curr_date <= end_date DO
    INSERT IGNORE INTO days(day)  VALUES(curr_date);
    SET curr_date = DATE_ADD(curr_date, INTERVAL 1 DAY);
  END WHILE;
END

Sau đó, bạn có thể gọi thủ tục này để tạo ra những ngày như thế này:

CALL make_days('2011-01-01','2012-12-31');

Giờ đây, bạn có thể tạo các giá trị cho mỗi phút trong một khoảng thời gian nhất định bằng cách sử dụng một truy vấn tương tự như sau:

SELECT YEAR(day) AS year, MONTH(day) AS month, DAYOFMONTH(day) AS day, hour, minute
FROM days, hours, minutes
WHERE CAST(CONCAT(day,' ',hour,':',minute) AS DATETIME) BETWEEN '2011-08-31 22:00' AND '2011-09-01 10:00'
ORDER BY year, month, day, hour, minute


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đặt Đường dẫn biến môi trường bằng C #

  2. MySQL rất chậm cho truy vấn bảng thay đổi

  3. Lệnh SQL để liệt kê &hiển thị tất cả cơ sở dữ liệu trong MySQL &MariaDB

  4. MySQL:Khi nào thì Flush Privileges trong MySQL thực sự cần thiết?

  5. Làm thế nào để xử lý lỗi cho các mục nhập trùng lặp?