Avatar billede asn24 Nybegynder
02. juli 2009 - 08:57 Der er 7 kommentarer og
2 løsninger

MSSQL og GROUP?

Hejsa

Jeg har lidt et problem med MSSQL og dens maade at fortolke GROUP BY.

Jeg har googlet siden kl 08:30 imorges, og nu er klokken 12:22 her i Indien, saa jeg er ved at vaere godt traet af det.

Jeg har denne query:

SELECT    location, datetime, session_id, id, username
FROM        activity
WHERE    (datetime >= '1246473000')
GROUP BY session_id
ORDER BY id DESC

Hvordan faar jeg den til at grupere det sammen, altsaa ligesom group by fungerer i MySQL?

Jeg faar denne fejl:

Warning: mssql_query() [function.mssql-query]: message: Column 'activity.location' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. (severity 16) in D:\HSE2\class\db.class.php on line 87

Warning: mssql_query() [function.mssql-query]: message: Column 'activity.datetime' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. (severity 16) in D:\HSE2\class\db.class.php on line 87

Warning: mssql_query() [function.mssql-query]: message: Column 'activity.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. (severity 16) in D:\HSE2\class\db.class.php on line 87

Warning: mssql_query() [function.mssql-query]: message: Column 'activity.username' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. (severity 16) in D:\HSE2\class\db.class.php on line 87

Jeg giver maaske lidt mange points, men jeg vil ogsaa meget gerne have en udfoerlig forklaring paa hvad problemet er sammen med loesningen :) - Det skader jo ikke noget at laere noget ;)

Paa forhaand mange mange tak!
Avatar billede terry Ekspert
02. juli 2009 - 09:40 #1
Avatar billede asn24 Nybegynder
02. juli 2009 - 09:48 #2
Okay, hvis jeg saa ikke skal manipulere min anden data, men bare slaa alle med samme session_id sammen, hvad skal jeg saa goere? Group by er aabenbart ikke maaden at goere det paa saa?
Avatar billede fsconsult.dk Nybegynder
02. juli 2009 - 09:53 #3
Jeg ved ikke hvad du ønsker at få ud af din query, men som udgangspunkt skal man gruppere på alle ikke-aggragerede felter i sin query (dvs. sum, count m.m.)
Avatar billede asn24 Nybegynder
02. juli 2009 - 10:11 #4
Okay.. Jeg skal lave et system der skal tracke brugeres gang paa en side. Det er det system jeg skal have lavet en frontend til, altsaa saa administratoren kan se hvordan brugerene bevaeger sig rundt. Derfor skal jeg praesentere ham for nogle informationer om hver enkelt bruger, og vise den senste placering af brugeren.

Det har resulteret i at jeg har et lille ton poster i min database, og dem skal jeg have kvaernet sammen saa det bliver til en, i stil med:

Username      Last location      Time      Pages in this visit
asn24        index.php          05:30:00  24 (dette er et link til at se udspiciferet information om denne brugers faerden)

I MySQL havde jeg bare lavet min query saadan her:

SELECT *, COUNT(id) FROM activity WHERE datetime >= datetime >= '" . mktime(0,0,0,date("n"), date("j"), date("Y")) . "' GROUP BY session_id

og saa ville jeg faa et resultat i stil med det ovenstaaende.

Det er det jeg gerne vil have :)
Avatar billede aaberg Nybegynder
02. juli 2009 - 11:26 #5
Når man bruger group by (og det gælder alle databaser, inklusiv mySQL), så SKAL man referere til alle de ikke-aggragerte felter man ønsker at querien skal returnere. Ellers har serveren ikke en chance til at vide hvad du ønsker at returnere.

hvad med:

select session_id, Username, max(time), count(session)
from activity
group by session_id, Username
Avatar billede fsconsult.dk Nybegynder
02. juli 2009 - 11:37 #6
noget med:

select a.session_id, a.username, max(datetime) as max_time, count(session), s.location
from activity a
join activity s ON s.session=a.session and s.datetime=max_time
where a.datetime >= xxxxx
Avatar billede asn24 Nybegynder
02. juli 2009 - 12:52 #7
Aah.. Det forklarede jo en del! - Jeg siger tak! Hvis aaberg_cc og fsconsult.dk lige smider et svar, saa kan i faa lov at dele pointene :)
Avatar billede fsconsult.dk Nybegynder
02. juli 2009 - 13:01 #8
;)
Avatar billede aaberg Nybegynder
02. juli 2009 - 13:38 #9
:-)

takk!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester