[MS SQL / PHP] Group by datetime

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik voer onderstaande query uit:

// gemiddeld aantal bezoekers deze maand
$sql = " SELECT COUNT(bezoeker) AS bezoekers ,MONTH(datum) AS maand, YEAR(datum) AS jaar";
$sql .= " FROM stats";
$sql .= " WHERE MONTH(datum)='$maandnu'";
$sql .= " AND YEAR(datum)='$jaarnu'";
$sql .= " GROUP BY jaar,maand";

Echter krijg ik dan onderstaande foutmelding:
Warning: mssql_query() [function.mssql-query]: Sybase: Server message: Invalid column name 'maand'. (severity 16, procedure N/A)

Dus dat de kolom maand niet bestaat.. klopt het dat je niet kan groeperen op groepen die je zelf toekend in het select statement ?

En is hier nog een andere oplossing voor, GROUP BY YEAR(datum),MONTH(datum) werkt ook niet..

(datum is een datetime veld)

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Kan je het jaar en maand niet via CONCAT oid bij elkaar gooien?
* MueR kijkt een collega even over de tafel aan

Edit:
Een google op DATEPART gaf mij deze pagina op MSDN, wat de volgende comment bevatte (2e comment):
Given a column SALESDATE in table SALES, this select will produce sales dates formatted in nice, 10-character strings of the form MM/DD/YYYY:

SQL:
1
SELECT CAST(DATEPART(mm, SALESDATE) as varchar(2)) + '/' + CAST(DATEPART(dd, SALESDATE) as varchar(2)) + '/' + CAST(DATEPART(yyyy, SALESDATE) as varchar(4)) AS SALESDATE


This is handy enough that I thought someone else might like to find it when they're googling.
* MueR mept Yoozer. Je hoeft niet meteen te reageren als ik je over de tafel aankijk!

[ Voor 76% gewijzigd door MueR op 13-05-2008 16:09 ]

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


Acties:
  • 0 Henk 'm!

  • Yoozer
  • Registratie: Februari 2001
  • Laatst online: 03-08 17:53

Yoozer

minimoog

MSSQL heeft geen MONTH of YEAR maar DATEPART.

Zie http://doc.ddart.net/mssql/sql70/da-db_8.htm :)

Zo heb je ook geen IFNULL maar ISNULL, dus kijk je SQL maar eens even na op dat soort fratsen :)

* Yoozer mept MueR, had je maar niks moeten vragen :P

[ Voor 44% gewijzigd door Yoozer op 13-05-2008 16:09 ]

teveel zooi, te weinig tijd


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yoozer schreef op dinsdag 13 mei 2008 @ 16:06:
MSSQL heeft geen MONTH of YEAR maar DATEPART.

Zie http://doc.ddart.net/mssql/sql70/da-db_8.htm :)

Zo heb je ook geen IFNULL maar ISNULL, dus kijk je SQL maar eens even na op dat soort fratsen :)
In de select werkt het wel met MONTH en YEAR.. alleen die group by wil hij niet. Ik zal het eens testen met DATEPART

Acties:
  • 0 Henk 'm!

  • Yoozer
  • Registratie: Februari 2001
  • Laatst online: 03-08 17:53

Yoozer

minimoog

Nog even voor je gekeken, je had gelijk, YEAR en MONTH lijken te werken zoals 't hoort.

In plaats van een GROUP BY te doen op jaar en maand, probeer eens op YEAR(datum) en MONTH(datum). Dat werkt hier zoals het hoort, dus "AS" lijkt alleen nuttig te zijn als je door het resultaat gaat lezen.

SQL:
1
2
3
4
SELECT     COUNT(bezoeker) AS bezoekers, DATEPART(yy, datum) AS jaar, DATEPART(mm, datum) AS maand
FROM         time_manager
WHERE     (DATEPART(yy, datum) = 2008) AND (DATEPART(mm, datum) = 5)
GROUP BY DATEPART(yy, datum), DATEPART(mm, datum)

edit; even gedaan met datepart, dit werkt hier.

[ Voor 52% gewijzigd door Yoozer op 13-05-2008 16:26 ]

teveel zooi, te weinig tijd


Acties:
  • 0 Henk 'm!

  • lier
  • Registratie: Januari 2004
  • Laatst online: 22:38

lier

MikroTik nerd

Over welke versie van SQL server wordt hier gesproken (2000/2005/2008) ?
En is hier nog een andere oplossing voor, GROUP BY YEAR(datum),MONTH(datum) werkt ook niet..
Welke (fout)melding krijg je exact ?

Eerst het probleem, dan de oplossing


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yoozer: dat doet hij niet met MONT(datum) in de group by
DATEPART, pakt hij overigens ook niet.

Het is Microsoft SQL versie 2000

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
lier schreef op dinsdag 13 mei 2008 @ 16:21:
Over welke versie van SQL server wordt hier gesproken (2000/2005/2008) ?


[...]


Welke (fout)melding krijg je exact ?
Warning: mssql_query() [function.mssql-query]: Sybase: Server message: Column 'stats.datum' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. (severity 16, procedure N/A) in /home/dienstenportal/public_html/stats.php on line 51

(met: $sql .= " GROUP BY MONTH(datum)"; )

Acties:
  • 0 Henk 'm!

  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Aliassen kan je toch niet gebruiken in een group by in MSSQL? Gebruik de originele veldnaam eens in je group by?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yoozer schreef op dinsdag 13 mei 2008 @ 16:18:
Nog even voor je gekeken, je had gelijk, YEAR en MONTH lijken te werken zoals 't hoort.

In plaats van een GROUP BY te doen op jaar en maand, probeer eens op YEAR(datum) en MONTH(datum). Dat werkt hier zoals het hoort, dus "AS" lijkt alleen nuttig te zijn als je door het resultaat gaat lezen.

SQL:
1
2
3
4
SELECT     COUNT(bezoeker) AS bezoekers, DATEPART(yy, datum) AS jaar, DATEPART(mm, datum) AS maand
FROM         time_manager
WHERE     (DATEPART(yy, datum) = 2008) AND (DATEPART(mm, datum) = 5)
GROUP BY DATEPART(yy, datum), DATEPART(mm, datum)

edit; even gedaan met datepart, dit werkt hier.
_/-\o_

Die doet al meer, alleen mn query levert nog niet het gewenste resultaat op :+
Tnx voor de hulp iig!

[ Voor 30% gewijzigd door Verwijderd op 13-05-2008 16:36 ]

Pagina: 1