sql >> Database teknologi >  >> RDS >> Mysql

Sådan får du værdier for hver dag i en måned

Dette er faktisk overraskende svært at gøre i SQL. En måde at gøre det på er at have en lang select-sætning med UNION ALLs for at generere tallene fra 1 til 31. Dette demonstrerer princippet, men jeg stoppede ved 4 for klarhedens skyld:

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 være bedre at bruge en tabel til at gemme disse værdier og slutte sig til den i stedet for.

Resultat:

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


  1. Hvordan får man mysql MEMORY ENGINE til at gemme flere data?

  2. PHP MySql ukendt servervært

  3. Sammenlign to rækker og identificer kolonner, hvis værdier er forskellige

  4. Android Studio markerer/fremhæver ikke Kotlin Room DAO-forespørgsler, når strengen optager mere end 1 række