---
title: "Gruppera data efter dag/vecka/månad"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/132504-gruppera-data-efter-dag-vecka-månad"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "klockren"
published: "2005-08-09T21:11:32.000Z"
updated: "2005-08-10T07:18:24.000Z"
replies: 1
views: 575
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/132504-gruppera-data-efter-dag-vecka-månad"
---

# Gruppera data efter dag/vecka/månad

## #1 — klockren, 2005-08-09T21:11Z

Jag har en tabell i en mySQL-databas som innehåller poäng som användarna registrerar (från stegräknare/motion). Den är i grova drag strukturerad som

username (varchar) - aktivitet (varchar) - datum (date, ex  2005-080-7) - poäng (int)

Nu vill jag visa grafisk statistik över registrerade poäng (med hjälp av jpGraph).

Användaren ska kunna välja mellan att vista statistik för senaste veckan (grupperat per dygn), senaste 3 månaderna (grupperat per 7-dagarsperiod) samt senaste året (grupperat per månad).

Min SQL-fråga och PHP-koden som läser in data i arrayer ser hittills ut som följande:

```php
$statsql = mysql_query("SELECT datum, SUM(poang) FROM aktiviteter WHERE username = '$username' GROUP BY datum");

while($statrow = mysql_fetch_array($statsql)) {
	$xaxel[] = $statrow[0];
	$yaxel[] = $statrow[1];
}
```

 

(SUM använder jag då man kan registrera flera aktiviteter på en dag)

**Problem1:**
Vissa dagar/veckor/månader finns det inte några poäng registrerade för. Då kommer det inte att bli någon "stapel" (arraypost) för den dagen/veckan/månaden. Jag vill att det ska skapas nollposter för dessa dagar! För en vecka kan jag ju göra 7 SQL-frågor, en för varje dag, men det känns lite fult...

**Problem2:**
Har inte luskat ut hur jag från ett "date"-fält får ut data grupperad efter månad eller år (i en så enkel sql-fråga som möjligt).

Tack på förhand!

Permalänk: https://www.webforum.nu/p/132504

## #2 — LarsG, 2005-08-10T07:18Z

1)

Det går att lösa med en hjälptabell som har en integer-kolumn där du lagrar värdena 0 till 365.  

Med denna tabell och lämplig funktion (date_add) kan du konstruera alla datum du behöver och sedan göra en left join  mot aktivitetstabellen. Du måste då ta hand om de poäng som är null med hjälp av

```
SUM(coalesce(poang,0))
```

2) Du kan använda funktionerna month och week i din group by.

Permalänk: https://www.webforum.nu/p/1655380

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/132504-gruppera-data-efter-dag-vecka-månad
