Help me schrijven van SQL query's voor tijdreeksanalyse
description
Met deze prompt kan de gebruiker geavanceerde SQL query's schrijven om tijdreeksgegevens effectief te analyseren, trends en afwijkingen te ontdekken en zo diepere inzichten uit hun data te halen. Het biedt praktische voorbeelden en uitleg, wat het leerproces versnelt en het resultaat betrouwbaarder maakt dan generieke query hulp.
prompt
Help me SQL query's te schrijven die tijdreeksgegevens analyseren en inzichten bieden. Mijn dataset beschrijving: <beschrijf je dataset of tijd ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorbeeld van SQL-query's die je kunnen helpen bij het analyseren van tijdreeksgegevens zoals dagelijkse bezoekersaantallen per pagina. Ik zal uitleg geven over de gebruikte functies en methoden.
**1. Trendanalyse: Gemiddelde bezoekers per dag en maand**
```sql
-- Gemiddelde bezoekers per dag
SELECT
datum,
AVG(bezoekers) AS gemiddeld_bezoekers
FROM
bezoekersgegevens
GROUP BY
datum
ORDER BY
datum;
```
*Uitleg:* Deze query geeft het gemiddelde aantal bezoekers per dag weer. Dit helpt om de algemene trend over tijd te zien.
---
**2. Seizoensinvloeden: Gemiddelde bezoekers per maand**
```sql
-- Gemiddelde bezoekers per maand
SELECT
DATE_TRUNC('month', datum) AS maand,
AVG(bezoekers) AS gemiddeld_bezoekers
FROM
bezoekersgegevens
GROUP BY
maand
ORDER BY
maand;
```
*Uitleg:* Door de gegevens per maand te groeperen, kun je seizoenspatronen identificeren, zoals hogere of lagere bezoekersaantallen in bepaalde maanden.
---
**3. Identificatie van afwijkingen: Detectie van dagen met uitzonderlijk hoge of lage bezoekersaantallen**
```sql
-- Dagen met bezoekersaantallen die afwijken van het gemiddelde
WITH statistieken AS (
SELECT
AVG(bezoekers) AS gemiddeld,
STDDEV(bezoekers) AS stddev
FROM
bezoekersgegevens
)
SELECT
b.datum,
b.bezoekers,
s.gemiddeld,
s.stddev
FROM
bezoekersgegevens b,
statistieken s
WHERE
b.bezoekers > s.gemiddeld + 2 * s.stddev
OR b.bezoekers < s.gemiddeld - 2 * s.stddev
ORDER BY
b.datum;
```
*Uitleg:* Deze query identificeert dagen waar bezoekersaantallen significant hoger of lager zijn dan het gemiddelde, gebruikmakend van standaarddeviaties. Dagen die meer dan twee standaarddeviaties boven of onder het gemiddelde liggen, kunnen bijzondere gebeurtenissen of afwijkingen aangeven.
---
**4. Visualisatie (optioneel):** Voor een betere interpretatie kun je de resultaten exporteren naar een visualisatietool zoals Excel, Tableau, of Power BI, of SQL gebruiken in combinatie met grafieken in een BI-tool.
---
**Samenvatting:**
- Gebruik `AVG()` voor gemiddelden.
- Gebruik `DATE_TRUNC()` om data te groeperen per maand.
- Gebruik `STDDEV()` voor spreidingsmaten en afwijkingdetectie.
- Combineer aggregaties en conditionele filters om inzichten te krijgen.
Heb je specifieke vragen over de data of wil je meer complexe analyses?
provider: deepseek
model: deepseek-chat
Zeker, hier zijn enkele krachtige SQL queries om uw tijdreeksgegevens over dagelijkse bezoekersaantallen te analyseren:
### 1. Basis trendanalyse met voortschrijdend gemiddelde
```sql
SELECT
datum,
bezoekers_aantal,
AVG(bezoekers_aantal) OVER (
ORDER BY datum
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS voortschrijdend_gemiddelde_7d,
AVG(bezoekers_aantal) OVER (
ORDER BY datum
ROWS BETWEEN 29 PRECEDING AND CURRENT ROW
) AS voortschrijdend_gemiddelde_30d
FROM dagelijkse_bezoekers
ORDER BY datum;
```
**Uitleg**:
- `AVG() OVER()`: Bereken het gemiddelde over een bewegend venster
- `ROWS BETWEEN X PRECEDING AND CURRENT ROW`: Definieert het venster van rijen
- Identificeert langetermijntrends door dagelijkse fluctuaties te dempen
### 2. Seizoensinvloeden per dag van de week
```sql
SELECT
EXTRACT(DOW FROM datum) AS dag_van_de_week,
TO_CHAR(datum, 'Day') AS weekdag_naam,
AVG(bezoekers_aantal) AS gemiddelde_bezoekers,
STDDEV(bezoekers_aantal) AS standaardafwijking
FROM dagelijkse_bezoekers
GROUP BY EXTRACT(DOW FROM datum), TO_CHAR(datum, 'Day')
ORDER BY dag_van_de_week;
```
**Uitleg**:
- `EXTRACT(DOW FROM datum)`: Haalt de dag van de week op (0=zondag, 6=zaterdag)
- `STDDEV()`: Bereken de standaardafwijking voor variatie-analyse
- Toont patronen per weekdag voor seizoensanalyse
### 3. Maandelijkse trend- en groeianalyse
```sql
SELECT
EXTRACT(YEAR FROM datum) AS jaar,
EXTRACT(MONTH FROM datum) AS maand,
SUM(bezoekers_aantal) AS totale_bezoekers,
LAG(SUM(bezoekers_aantal)) OVER (ORDER BY EXTRACT(YEAR FROM datum), EXTRACT(MONTH FROM datum)) AS vorige_maand,
ROUND((SUM(bezoekers_aantal) - LAG(SUM(bezoekers_aantal)) OVER (ORDER BY EXTRACT(YEAR FROM datum), EXTRACT(MONTH FROM datum))) /
LAG(SUM(bezoekers_aantal)) OVER (ORDER BY EXTRACT(YEAR FROM datum), EXTRACT(MONTH FROM datum)) * 100, 2) AS groei_percentage
FROM dagelijkse_bezoekers
GROUP BY EXTRACT(YEAR FROM datum), EXTRACT(MONTH FROM datum)
ORDER BY jaar, maand;
```
**Uitleg**:
- `LAG()`: Toegang tot waarden uit vorige rijen
- Maand-op-maand groeiberekening
- Identificeert maandelijkse trends en groeipatronen
### 4. Afwijkingsdetectie met Z-score
```sql
WITH statistieken AS (
SELECT
AVG(bezoekers_aantal) AS gemiddelde,
STDDEV(bezoekers_aantal) AS standaardafwijking
FROM dagelijkse_bezoekers
)
SELECT
datum,
bezoekers_aantal,
(bezoekers_aantal - gemiddelde) / standaardafwijking AS z_score,
CASE
WHEN ABS((bezoekers_aantal - gemiddelde) / standaardafwijking) > 2 THEN 'Afwijking'
ELSE 'Normaal'
END AS status
FROM dagelijkse_bezoekers, statistieken
ORDER BY ABS(z_score) DESC;
```
**Uitleg**:
- Z-score berekent hoe veel standaardafwijkingen een waarde van het gemiddelde afwijkt
- Waarden met |z-score| > 2 worden typisch als afwijkingen beschouwd
- `WITH clause`: Common Table Expression voor herbruikbare subquery
### 5. Seizoenscomparison jaar-op-jaar
```sql
SELECT
EXTRACT(MONTH FROM datum) AS maand,
EXTRACT(DAY FROM datum) AS dag,
EXTRACT(YEAR FROM datum) AS jaar,
bezoekers_aantal,
AVG(bezoekers_aantal) OVER (
PARTITION BY EXTRACT(MONTH FROM datum), EXTRACT(DAY FROM datum)
ORDER BY EXTRACT(YEAR FROM datum)
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
) AS historisch_gemiddelde
FROM dagelijkse_bezoekers
ORDER BY maand, dag, jaar;
```
**Uitleg**:
- `PARTITION BY`: Groepeert perzelfde dag en maand over verschillende jaren
- Vergelijkt prestaties met historische gemiddelden voor dezelfde datum
- Identificeert afwijkingen van seizoenspatronen
### 6. Top paginaprestaties met trendranking
```sql
WITH maandelijkse_prestaties AS (
SELECT
pagina_url,
EXTRACT(YEAR FROM datum) AS jaar,
EXTRACT(MONTH FROM datum) AS maand,
SUM(bezoekers_aantal) AS bezoekers,
RANK() OVER (PARTITION BY EXTRACT(YEAR FROM datum), EXTRACT(MONTH FROM datum) ORDER BY SUM(bezoekers_aantal) DESC) AS ranking
FROM dagelijkse_bezoekers
GROUP BY pagina_url, EXTRACT(YEAR FROM datum), EXTRACT(MONTH FROM datum)
)
SELECT * FROM maandelijkse_prestaties
WHERE ranking <= 10
ORDER BY jaar, maand, ranking;
```
**Uitleg**:
- `RANK()`: Wijs een rang toe binnen elke partitie
- Identificeert consistente topperformers en opkomende trends
- Toont maandelijkse ranking evolutie
**Tips voor gebruik**:
1. Pas datumformaten aan naar uw database-systeem
2. Voeg indexen toe op datum- en paginakolommen voor betere prestaties
3. Gebruik `WHERE datum >= CURRENT_DATE - INTERVAL '1 year'` voor rolling year analysis
4. Combineer deze queries voor diepgaande multivariabele analyse
Deze queries helpen u trends te identificeren, seizoenspatronen te herkennen, afwijkingen te detecteren en prestaties te benchmarken over tijd.