Toon posts:

[SQL] Group By "deze maand"

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een heel klein probleempje. :P

Ik heb een tabel genaamd "monitoring". Hierin wordt elke 10 minuten een overzicht opgeslagen met gegevens m.b.t. server load, traffic, geheugen etc. Elk van deze records krijgt een ID mee, en een TimeStamp (DateTime).

Nu wil ik per dag een overzicht gaan tonen van de opgeslagen resultaten uit de database en misschien dat ik te moeilijk denk maar dit wil ik dan gaan selecteren aan de hand van de TimeStamp welke een inhoud heeft van bijvoorbeeld "6-12-2001 15:49:57".

Nu zou ik graag de records in de database willen grouperen op dag van de maand. Normaliter zou je dan zeggen Group By TimeStamp. Helaas zijn de TimeStamps niet identiek vanwege de tijd die er bij staat en werkt een functie als Group By verkrijg_de_dag_van(TimeStamp).

Is er toch een andere mogelijkheid dan onnodige gaan loopen om toch de records te grouperen op dag van de timestamp per maand?

erm.. is het nog te volgen ? :+

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

ik denk het niet. Je zal toch van elke timestamp de dag/maand/jaar moeten verkrijgen...

Klaar voor een nieuwe uitdaging.


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 19:13

Crazy D

I think we should take a look.

Kun je niet iets doen als
GROUP BY MONTH(timestamp-veld)

(beetje afhankelijke van welke db je gebruikt natuurlijk, maar de meeste db's ondersteunen zoiets toch wel :?)

Exact expert nodig?


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

In Oracle zou je dit kunnen doen door te groupen op trunc(timestamp, 'MM').
Maar je gebruikt vast geen Oracle ;) :P

Who is John Galt?


Verwijderd

Topicstarter
Op vrijdag 07 december 2001 10:22 schreef Crazy_D het volgende:
Kun je niet iets doen als
GROUP BY MONTH(timestamp-veld)

(beetje afhankelijke van welke db je gebruikt natuurlijk, maar de meeste db's ondersteunen zoiets toch wel :?)
Ik gebruik MS SQL Server. En ik heb het al op de volgende manier geprobeerd maar dat pikt die niet :)

SELECT *
FROM logging
GROUP BY #DateFormat(timestamp, "dd")#
ORDER BY timestamp

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Voor iemand vraagt hoe het in mysql kan, mocht het in bovenstaande manieren niet werken. Dan kan je altijd zoiets nog doen:

select *, verkrijg_je_maanden(tijdveld) as month
from ...
where ...
group by month

Waarschijnlijk werkt dat ook wel in andere DB's ? Maar de manier hierboven is netter denk ik :)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op vrijdag 07 december 2001 10:24 schreef Gordijnstok het volgende:
Ik gebruik MS SQL Server. En ik heb het al op de volgende manier geprobeerd maar dat pikt die niet :)

SELECT *
FROM logging
GROUP BY #DateFormat(timestamp, "dd")#
ORDER BY timestamp
Ik neem aan dat ook MS SQL server dit niet kan accepteren.
Als je gaan groeperen dan kun je geen * meer in je select list zetten.

Who is John Galt?


Verwijderd

Topicstarter
Ik heb het al gevonden en ga het natuurlijk ook even "sharen" :)

Het is dus wel te doen, en het is te doen door gebruik te maken van Scalar Functions. Dit zijn functies die alleen voor de Microsoft producten gelden net zoals Oracle weer zijn eigen functies heeft. Dit is geen vast onderdeel van ODBC.

Scalar functies zijn:

LTRIM(string)
RIGHT(string, count)
RTRIM(string)
SUBSTRING(string, start, count)
UCASE(string)
CURDATE()
CURTIME()
DAYOFMONTH(date)
DAYOFWEEK(date)
MONTH(date)
YEAR(date)
MOD(integer1, integer2)

Oftewel het wordt dus:

Group BY {fn DAYOFMONTH(TimeStamp)}

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op vrijdag 07 december 2001 10:34 schreef Gordijnstok het volgende:
Dit is geen vast onderdeel van ODBC.
Wat heeft ODBC met de beschikbare SQL functies van een database te maken?
Group BY {fn DAYOFMONTH(TimeStamp)}
Oracle en Sybase kennen DAYOFMONTH ook, maar daar hoef je geen rare {fn ...} constructie te gebruiken. Is dat echt nodig in MSSQL? :)

Verwijderd

Topicstarter
Op vrijdag 07 december 2001 10:58 schreef Onno het volgende:

[..]

Wat heeft ODBC met de beschikbare SQL functies van een database te maken?
[..]

Oracle en Sybase kennen DAYOFMONTH ook, maar daar hoef je geen rare {fn ...} constructie te gebruiken. Is dat echt nodig in MSSQL? :)
Ja schijnbaar is die fn constructie echt nodig, zonder gaf die een foutmelding vanuit SQL Server.

Wat betreft die ODBC, ik heb het even voor je opgezocht en quote het ffies voor je :)
Table 31.2 summarizes the scalar functions supported by the Microsoft desktop family of ODBC drivers. These are not the scalar functions defined by ODBC, but it is the list that is most commonly supported in real-world driver implementations. You will need to experiment a bit or consult your driver's documentation (if any) to determine which functions are supported by your driver.
Wat heeft ODBC met de beschikbare SQL functies van een database te maken?Dat ik niet goed de tekst had gelezen :)

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Ik wet het niet zeker, maar dit gaat volgens mij maar 1 maand goed.

Dayofmonth levert in Oracle alleen het dag gedeelte van een datum op.
dus dayofmonth("2001-12-1") levert 1 op,
maar dayofmonth("2001-11-1") ook.

Dus hoelang gaat dit goed?

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op maandag 10 december 2001 16:12 schreef Goodielover het volgende:
Ik wet het niet zeker, maar dit gaat volgens mij maar 1 maand goed.
Wie zegt dat er niet nog ergens "and month(blaat)=.." bijstaat? :)

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Googelen met de timestamp dat je alleen de dag en maand en jaar gebruikt om te groeperen..

Dat kan.. :P gewoon de data functies gebruiken van je database.. zelfs MySQL heeft ze :+ ( dus anderen zouden het ook wel moeten hebben >:) )

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op maandag 10 december 2001 16:14 schreef Onno het volgende:

[..]

Wie zegt dat er niet nog ergens "and month(blaat)=.." bijstaat? :)
Ha ha heel grappig hoor (not!) Ik meen dat serieus. Volgens mij is de oplossing gewoon niet goed.
In Oracle zou het gewoon group by trunc(tabel.Timestamp) zijn. Ik kan me niet voostellen dat een trunc functie niet beschikbaar is.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Let je er trouwens wel op dat januari 2001 en januari 2002 nu in dezelfde groep vallen?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1