sql >> Databasteknik >  >> RDS >> Mysql

Hur man får värden för varje dag under en månad

Detta är faktiskt förvånansvärt svårt att göra i SQL. Ett sätt att göra det är att ha en lång select-sats med UNION ALLs för att generera siffrorna från 1 till 31. Detta visar principen men jag stannade vid 4 för tydlighetens skull:

SELECT MonthDate.Date, COALESCE(SUM(`values`), 0) AS Total
FROM (
    SELECT 1 AS Date UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    --
    SELECT 28 UNION ALL
    SELECT 29 UNION ALL
    SELECT 30 UNION ALL
    SELECT 31) AS MonthDate
LEFT JOIN Table1 AS T1
ON MonthDate.Date = DAY(T1.Date)
AND MONTH(T1.Date) = 1 AND YEAR(T1.Date) = 2010
WHERE MonthDate.Date <= DAY(LAST_DAY('2010-01-01'))
GROUP BY MonthDate.Date

Det kan vara bättre att använda en tabell för att lagra dessa värden och gå med i den istället.

Resultat:

1, 34
2, 10
3, 0
4, 7


  1. Vila dialekt för Oracle Database 11g?

  2. Migrera en Oracle-databas från AWS EC2 till AWS RDS, del 2

  3. Kunskap om att återställa raderade poster i SQL Server

  4. Infoga uttalande som kontrollerar dubbletter före infogning