sql >> Databáze >  >> RDS >> Mysql

dosáhnout limitu paměti se smyčkou uvnitř smyčky uvnitř smyčky

Vygeneroval bych řadu dní a připojil bych se k vaší tabulce ročních období a použil bych jediný dotaz k získání požadovaného výsledku, např.:

SELECT dates.Date,
       coalesce(s.price, 0) AS price
FROM
  (SELECT a.Date
   FROM
     ( SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date, '0' AS price
      FROM
        (SELECT 0 AS a
         UNION ALL SELECT 1
         UNION ALL SELECT 2
         UNION ALL SELECT 3
         UNION ALL SELECT 4
         UNION ALL SELECT 5
         UNION ALL SELECT 6
         UNION ALL SELECT 7
         UNION ALL SELECT 8
         UNION ALL SELECT 9) AS a
      CROSS JOIN
        (SELECT 0 AS a
         UNION ALL SELECT 1
         UNION ALL SELECT 2
         UNION ALL SELECT 3
         UNION ALL SELECT 4
         UNION ALL SELECT 5
         UNION ALL SELECT 6
         UNION ALL SELECT 7
         UNION ALL SELECT 8
         UNION ALL SELECT 9) AS b
      CROSS JOIN
        (SELECT 0 AS a
         UNION ALL SELECT 1
         UNION ALL SELECT 2
         UNION ALL SELECT 3
         UNION ALL SELECT 4
         UNION ALL SELECT 5
         UNION ALL SELECT 6
         UNION ALL SELECT 7
         UNION ALL SELECT 8
         UNION ALL SELECT 9) AS c) a
   WHERE a.Date BETWEEN '$from' AND '$to'
   ORDER BY a.Date) dates
LEFT JOIN seasons s ON dates.Date BETWEEN s.start AND s.END

Složitý vnitřní dotaz zabraňuje vytvoření dočasné tabulky (převzato z generate dnů od časového období ) a funguje až 1000 dní, ale vytvoření dočasné tabulky by bylo v pořádku.



  1. Spustit spouštěč při zobrazení?

  2. Použijte datum v buňce aplikace Excel v klauzuli BETWEEN v dotazu SQL

  3. jak nechat postgres ignorovat vložky s duplicitním klíčem, ale pokračovat

  4. Jak získat týdenní záznam v mysql od data začátku do konce