Sql : bepaalde gegevens in periode van 7 dagen optellen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 133464

Topicstarter
Beste,

Ik zit op dit moment met het volgende probleem.

Ik wil per week de getallen rechts optellen.
dus tel, per periode van 7 dagen, de gegevens in de laatste kolom op.

Hieronder de voorbeeld log.

1 2010-01-19 16:04:40 4111 1221625.95
2 2010-01-19 13:58:29 4110 1262421.10
3 2010-01-19 10:32:16 4109 1145477.99
4 2010-01-19 07:44:41 4106 7291383.57
5 2010-01-19 05:43:41 4107 7311936.51
6 2010-01-18 15:48:45 4105 1202058.54
7 2010-01-18 15:03:44 4104 1319470.97
8 2010-01-18 12:06:47 4103 130824.47

Wie kan mij hierbij helpen.

Bedankt

Acties:
  • 0 Henk 'm!

  • freak-ish
  • Registratie: December 2008
  • Laatst online: 15-01 17:16
Staat deze data allemaal in 1 kolom? if so, zou ik het eerst splitsen.
Zijn het al meerdere kolommen, dan kun je bijv. week(date_field) doen (of weeknum effe checken met welke versie van sql je werkt)

[ Voor 48% gewijzigd door freak-ish op 26-01-2010 12:24 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 11-05 13:06

MueR

Admin Tweakers Discord

is niet lief

Bijvoorbeeld de MySQL manual kan je helpen: http://dev.mysql.com/doc/...nctions.html#function_sum

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • GoVegan
  • Registratie: Juni 2002
  • Laatst online: 21-03 16:01
Anoniem: 133464 schreef op dinsdag 26 januari 2010 @ 12:20:
Beste,

Ik zit op dit moment met het volgende probleem.

Ik wil per week de getallen rechts optellen.
dus tel, per periode van 7 dagen, de gegevens in de laatste kolom op.

Hieronder de voorbeeld log.

1 2010-01-19 16:04:40 4111 1221625.95
2 2010-01-19 13:58:29 4110 1262421.10
3 2010-01-19 10:32:16 4109 1145477.99
4 2010-01-19 07:44:41 4106 7291383.57
5 2010-01-19 05:43:41 4107 7311936.51
6 2010-01-18 15:48:45 4105 1202058.54
7 2010-01-18 15:03:44 4104 1319470.97
8 2010-01-18 12:06:47 4103 130824.47

Wie kan mij hierbij helpen.

Bedankt
toon volledige bericht
Ik heb dit keer gedaan bij site statistieken,
hierbij liet ik van de de laatste twee maand,
elke dag zag zien, hoeveel personen er waren geweest (per dag)
en hoeveel personen er waren ingelogd (per dag)

deze regel zul je moet veranderen zodat hij alleen weken pakt.
date(`start_datetime`) AS session_date,


ziet er ongeveer zo uit:

SQL:
1
2
3
4
5
6
7
8
SELECT 
    date(`start_datetime`) AS session_date, 
    count(DISTINCT ip) AS aantal,
    count(DISTINCT user_id) AS aantal_log
    FROM wart_log_sessions`
    WHERE date(`start_datetime`) BETWEEN now() - INTERVAL 2 MONTH AND now() 
    GROUP BY session_date
    ORDER BY session_date DESC

[ Voor 11% gewijzigd door GoVegan op 26-01-2010 12:30 ]


Acties:
  • 0 Henk 'm!

  • freak-ish
  • Registratie: December 2008
  • Laatst online: 15-01 17:16
GoVegan schreef op dinsdag 26 januari 2010 @ 12:28:
[...]

SQL:
1
2
3
4
5
6
7
8
SELECT 
    date(`start_datetime`) AS session_date, 
    count(DISTINCT ip) AS aantal,
    count(DISTINCT user_id) AS aantal_log
    FROM wart_log_sessions`
    WHERE date(`start_datetime`) BETWEEN now() - INTERVAL 2 MONTH AND now() 
    GROUP BY session_date
    ORDER BY session_date DESC
Moeten we wel effe achterhalen met welke SQL hij werkt ;)

[ Voor 0% gewijzigd door freak-ish op 26-01-2010 12:36 . Reden: typo ]


Acties:
  • 0 Henk 'm!

Anoniem: 133464

Topicstarter
Bedankt alvast,

ik ga het één en ander eens proberen, kijken of het lukt

Het gaat om Sql versie 5.1
Data staat in verschillende kolommen

[ Voor 15% gewijzigd door Anoniem: 133464 op 26-01-2010 12:41 ]


Acties:
  • 0 Henk 'm!

  • freak-ish
  • Registratie: December 2008
  • Laatst online: 15-01 17:16
MySQL, IBM/DB2 SQL, Oracle SQL....Teradata?

Acties:
  • 0 Henk 'm!

  • GoVegan
  • Registratie: Juni 2002
  • Laatst online: 21-03 16:01
freak-ish schreef op dinsdag 26 januari 2010 @ 12:35:
[...]


Moeten we wel effe achterhalen met welke SQL hij werkt ;)
Dat is wel handig he :)
Mijn Query was richting een MySQL5 database

Acties:
  • 0 Henk 'm!

Anoniem: 133464

Topicstarter
Excuses MySQL versie 5.1

Bij het uitvoeren van dat script (uiteraard aangepast aan mijn gegegevens) krijg ik:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM logs
WHERE date(`start_datetime`) BETWEEN now() - INTERVAL 2 MONTH AN' at line 4

[ Voor 87% gewijzigd door Anoniem: 133464 op 26-01-2010 12:49 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Wat je zou kunnen doen is een datediff ( aantal dagen ) doen vanaf je start-datum en die delen door het aantal dagen waar je op wil groeperen ( Wel opletten dat het een int is ), en dan daarop groeperen.

Verder zou je de SQL syntax error die je hierboven geeft zelf moeten kunnen verklaren aan de hand van de query die je probeert uit te voeren.

[ Voor 26% gewijzigd door Woy op 26-01-2010 12:56 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Anoniem: 133464

Topicstarter
Dit is de input:
SELECT date(2007-01-15) AS session_date,
count(DISTINCT mb) AS aantal,
FROM logs
WHERE date(2007-01-15) BETWEEN now() - INTERVAL 2 MONTH AND now()

Ik ben op dit moment ook aan het kijken naar datediff

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-05 10:36

NMe

Quia Ego Sic Dico.

Anders haal je die komma voor FROM even weg... ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 133464

Topicstarter
Input:
SELECT date( '2007-01-15' ) AS session_date, count( DISTINCT mb ) AS aantal
FROM LOGS
WHERE date( '2007-01-15' )
BETWEEN now( ) - INTERVAL 2
MONTH AND now( )

Output:
session_date aantal
2007-01-15 0

Ik begrijp niet waarom hij niet goed werkt.
Is het ook een makkelijk idee om weeknummers te generen uit de datums?
Zodat ik een som maakt om de weeknummers afzonderlijk op te tellen?

Bedankt voor het antwoorden.

[ Voor 36% gewijzigd door Anoniem: 133464 op 26-01-2010 15:00 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-05 10:36

NMe

Quia Ego Sic Dico.

Nou om te beginnen omdat je where helemaal niks met velden uit je database doet. WHERE <3 jaar geleden> BETWEEN <2 maanden geleden> AND <nu> is altijd false, levert je dus altijd 0 records op, en dus is je optelsom/COUNT dus ook altijd 0.

Probeer eerst eens uit te vogelen wat je aan het doen bent in plaats van gewoon maar wat in te tikken. ;)

Weeknummers zijn overigens wel weer makkelijk.
SQL:
1
2
3
4
SELECT COUNT(*), YEAR(`datumveld`) AS `year`, WEEK(`datumveld`) AS `week`
FROM `tabel`
GROUP BY YEAR(`datumveld`), WEEK(`datumveld`)
ORDER BY `year`, `week`

[ Voor 23% gewijzigd door NMe op 26-01-2010 17:23 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Netjes werken helpt ook nog wel eens:
SQL:
1
2
3
4
5
6
7
SELECT 
  date( '2007-01-15' ) AS session_date, 
  count( DISTINCT mb ) AS aantal
FROM 
  LOGS
WHERE 
  date( '2007-01-15' ) BETWEEN (now( ) - INTERVAL 2 MONTH) AND now( );

Nu zie je direct dat de WHERE altijd false is. Waarom jij één vaste datum wilt opvragen en geen GROUP BY wilt gebruiken, geen idee, maar de kans op een correcte query is minimaal.

SQL:
1
2
3
4
5
6
7
8
9
SELECT 
  date( jouw_datum_veld ) AS session_date, 
  count( DISTINCT mb ) AS aantal
FROM 
  LOGS
WHERE 
  date( jouw_datum_veld ) BETWEEN (now( ) - INTERVAL 2 MONTH) AND now( )
GROUP BY
  session_date;

Acties:
  • 0 Henk 'm!

Anoniem: 133464

Topicstarter
Bedankt Mensen!
Ik heb het nu deels werkend.
Hij teld nu de mb's van dezelfde dag bij elkaar op.

SELECT date( date ) AS session_date, sum( mb ) AS aantal
FROM LOGS
WHERE date( date )
BETWEEN now( ) - INTERVAL 5 week AND now( )
GROUP BY session_date

Alleen nu was de bedoeling dat hij alle data in periodes van 7 dagen op telt.

Dus bijvoorbeeld:
Van 11 t/m 17 januari totaal: 2500000.00
Van 17 t/m 23 januari totaal: 2510000.00

[ Voor 36% gewijzigd door Anoniem: 133464 op 26-01-2010 16:09 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-05 10:36

NMe

Quia Ego Sic Dico.

Wat je daarvoor moet doen heb ik nota bene in mijn vorige post al letterlijk in code neergezet. :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 338200

De startdag van de WEEK function kan je ook nog tweaken naar eigen inzicht:
WEEK(date[,mode])
ModeFirst day of weekRangeWeek 1 is the first week …
0Sunday0-53with a Sunday in this year
1Monday0-53with more than 3 days this year
2Sunday1-53with a Sunday in this year
3Monday1-53with more than 3 days this year
4Sunday0-53with more than 3 days this year
5Monday0-53with a Monday in this year
6Sunday1-53with more than 3 days this year
7Monday1-53with a Monday in this year
:)

Acties:
  • 0 Henk 'm!

Anoniem: 133464

Topicstarter
Bedankt NMe en Rooz,
alleen order by moest veranderd worden YEAR(date)

[ Voor 5% gewijzigd door Anoniem: 133464 op 26-01-2010 16:56 ]


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 11-05 18:41

Nick_S

++?????++ Out of Cheese Error

Anoniem: 133464 schreef op dinsdag 26 januari 2010 @ 16:56:
Bedankt NMe en Rooz,
alleen order by moest veranderd worden YEAR(date)
Of je geeft je YEAR(date) in je SELECT een naam, net zoals de maand.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'

Pagina: 1