Toon posts:

[TSQL] GROUP BY op datum gaat fout

Pagina: 1
Acties:

Verwijderd

Topicstarter
Database: SQL server 2000
Tabel: log
Velden: (o.a.) datum - datetime (8), pagina - varchar(50)

Ik heb een database waarbij het veld datum wordt gebruikt voor het opslaan van statistiek gegevens.

Het datum veld is van het type datetime waarin de datum en tijd in wordt opgeslagen, boorbeeld: 2003-11-15 08:41.45

nu wil ik een overzicht krijgen van het totaal aantal bezoeken op een pagina op een dag verdeeld over de site die bezocht werden

2003-11-15 08:41.45 pagina1.htm
2003-11-15 04:21.16 pagina2.htm
2003-11-15 04:18.34 pagina1.htm
2003-11-15 02:12.35 pagina1.htm

nu doe ik het volgende
SELECT pagina, COUNT(pagina) AS aantal
FROM log
GROUP BY pagina -->edit remove (, aantal)
HAVING datum LIKE '%2003-11-15%'

maar nu krijg ik verkeerde weergave,
pagina1.htm 1
pagina2.htm 1
pagina1.htm 1
pagina1.htm 1

dit komt natuurlijk door de datum dat daar ook nog een tijd in zit, hoe krijg ik dit voor elkaar dat ik alleen op de datum verder ga, het databaseveld kan ik helaas niet aanpassen in twee velden datum en tijd.

Weet iemand wat meer? Ik denk zelf dat het datum veld eerst geconventeerd moet worden, maar ja hoe..

Opmerking: Ik heb nu even snel een voorbeeldje gemaakt met eenzelfde strekking, ik kan op deze pc waar ik dit invoer geen TSQL draaien, maar het gaat om het idee

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Waarom groupeer je ook op aantal, terwijl dat helemaal niet nodig is?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
ja daar heb je dus gelijk in, ik zit nu dus niet achter mijn PC maar dat is naar mijn mening niet de oplossing toch?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Ik denk dat dat wel de oplossing is. Met de like haal je alles op waar '2003-11-15' inzit, en dat groupeer je dan alleen per pagina. Er wordt dus helemaal niet vergeleken op de tijd.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

SQL:
1
2
3
4
SELECT COUNT(pagina) AS aantal, pagina, datum
FROM log
GROUP BY pagina 
WHERE datum BETWEEN '2003-11-15 00:00:00' AND '2003-11-15 23:59:59'

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


Verwijderd

DeverauX schreef op 16 november 2003 @ 10:04:
SQL:
1
2
3
4
SELECT COUNT(pagina) AS aantal, pagina, datum
FROM log
GROUP BY pagina 
WHERE datum BETWEEN '2003-11-15 00:00:00' AND '2003-11-15 23:59:59'
Maak van die WHERE maar HAVING

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Group by op datum lukt niet ivm het tijdsgedeelte. Maak een computed column in je table, die de datetime column stript van de tijd en group daarop.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Verwijderd schreef op 16 november 2003 @ 18:00:
[...]
Maak van die WHERE maar HAVING
Van die WHERE moet je helemaal geen HAVING maken, aangezien er niet gefilterd wordt op de aggregated column.

Kijk hier eens naar, misschien heb je er nog wat aan:
[rml][ SQL server/SQL]Tijd van DATETIME afhalen[/rml]

[ Voor 19% gewijzigd door whoami op 17-11-2003 08:30 ]

https://fgheysels.github.io/

Pagina: 1