sql >> Databasteknik >  >> RDS >> Mysql

Fyll saknade luckor i datumintervallfrågan med hjälp av kalendertabellen

Du behöver en yttre sammanfogning på kalenderbordet. Något liknande

SELECT c.cal_date, coalesce(t1.price, 0) as total
FROM calendar c
LEFT JOIN (SELECT b.purchase_date::date, sum(price) as price 
           FROM order_products a 
           INNER JOIN order_saved b 
                   ON a.order_id = b.id 
                   AND b.purchase_date BETWEEN '2011-09-16 23:59' AND '2011-10-16 23:59' 
                   AND b.status > 2
                   AND a.usr_id = 'XXXX'
            GROUP BY b.purchase_date) t1 on t1.purchase_date = c.cal_date
WHERE cal_date BETWEEN '2011-09-16 23:59' AND '2011-10-16 23:59' 
ORDER BY c.cal_date

Du får bättre svar om du lägger upp DDL (CREATE TABLE )-satser och minimal INSERT påståenden som ger oss tillräckligt med data för att faktiskt testa våra svar. (Redigera din fråga och klistra in DDL- och INSERT-satserna.)



  1. 5 knep för att säkerställa toppprestanda i SQL Server

  2. MySQL Välj fråga för att hämta postbas på listvärden

  3. Hur genererar man data i MySQL?

  4. Hur MAKETIME() fungerar i MariaDB