sql >> Databasteknik >  >> RDS >> Mysql

mySQL-fråga om upprepade händelser

Här är något jag har lekt med (och här är det som en sqlfiddle med några exempeldata)... inte 100% säker på det, men det borde fånga de senaste 7 dagarnas data. Observera att jag använder MySQL DATETIME kontra heltalstidsstämplar, men du borde kunna konvertera det enkelt (för att testa frågan var det mycket lättare att använda strängdatum).

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. Laravel beräkna summan av två kolumner med ett villkor

  2. Python tappar anslutningen till MySQL-databasen efter ungefär ett dygn

  3. Oracle-tabell dynamisk partition

  4. Hur man filtrerar in ett till många förhållande med android room db