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

Truy vấn sự kiện lặp lại mySQL

Đây là thứ mà tôi đã chơi với (và đây là sqlfiddle với một số dữ liệu mẫu) ... không chắc chắn 100% về nó, nhưng nó sẽ lấy dữ liệu của 7 ngày qua. Lưu ý rằng tôi đang sử dụng MySQL DATETIME so với dấu thời gian số nguyên, nhưng bạn sẽ có thể chuyển đổi dễ dàng (để kiểm tra truy vấn, việc sử dụng chuỗi ngày dễ dàng hơn nhiều).

SELECT *
  FROM
    (SELECT 
      *, 
      CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', DAY(start)) AS monthly,
      CONCAT(YEAR(NOW()), '-', MONTH(start), '-', DAY(start)) AS yearly
      FROM events
    ) tmp
  WHERE
    (
      (recurring = 'none')
      OR (recurring = 'daily')
      OR (recurring = 'weekly')
      OR (
        recurring = 'monthly'
        AND (
          (
            monthly >= NOW()
            AND monthly <= DATE_ADD(NOW(), INTERVAL 7 DAY)
          )
          OR (
            DATE_ADD(monthly, INTERVAL 1 MONTH) >= NOW()
            AND DATE_ADD(monthly, INTERVAL 1 MONTH) <= DATE_ADD(NOW(), INTERVAL 7 DAY)
          )
        )
      )
      OR (
        recurring = 'yearly'
        AND (
          (
            yearly >= NOW()
            AND yearly <= DATE_ADD(NOW(), INTERVAL 7 DAY)
          )
          OR (
            DATE_ADD(yearly, INTERVAL 1 YEAR) >= NOW()
            AND DATE_ADD(yearly, INTERVAL 1 YEAR) <= DATE_ADD(NOW(), INTERVAL 7 DAY)
          )
        )
      )
    )
    AND start <= NOW()
    AND (
      end IS NULL 
      OR end >= DATE_ADD(NOW(), INTERVAL 7 DAY)
    )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để áp dụng phương thức bindValue trong mệnh đề LIMIT?

  2. Mối quan hệ MySQL

  3. Làm cách nào để loại bỏ tất cả các bảng khỏi cơ sở dữ liệu với management.py CLI trong Django?

  4. Bộ đảo chữ cái với sql's%

  5. MySql SELECT AS - Nối tất cả các tên trường