Avatar billede jacknet Nybegynder
27. marts 2006 - 16:06 Der er 14 kommentarer og
2 løsninger

Problem med en collum i select

Hey,

Jeg får en fejl ved kørsel af følgende sproc:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[usp_HitLog_GetSessionIDs]
    @Since DATETIME,
    @Until DATETIME
AS
BEGIN
    SET NOCOUNT ON;

    SELECT SessionID, Logged
    FROM tblHitLog
    WHERE Logged > @Since
    AND Logged < @Until
    GROUP BY SessionID
    ORDER BY Logged DESC
END


Fejl:

Msg 8120, Level 16, State 1, Procedure usp_HitLog_GetSessionIDs, Line 9
Column 'tblHitLog.Logged' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Hvad er der galt?
Avatar billede michael_stim Ekspert
27. marts 2006 - 16:10 #1
GROUP BY SessionID, Logged ORDER BY Logged DESC
Avatar billede jacknet Nybegynder
27. marts 2006 - 16:17 #2
Det hjalp på fejlen, men mit resultsæt er ikke helt som jeg havde tænkt mig...
SessionId'erne opstræder mange gange, og meningen er at jeg bare vil have en liste med alle de forskellige sessionId der er. De skulle gerne komme ud i en rækkerølge hvor de nyeste (Posted) kommer først...
Avatar billede arne_v Ekspert
27. marts 2006 - 16:21 #3
hvad vil du have ud af den SELECT ?
Avatar billede jacknet Nybegynder
27. marts 2006 - 16:29 #4
Det jeg gerne vil have et noget i denne her stil:

Data:

Logged            SessionID
--------------------------------------------------------------
22-01-2006 23:03:36    acb1
22-01-2006 23:04:29    acb1
22-02-2006 19:00:41    acb2
22-02-2006 19:01:04    acb2
22-03-2006 11:17:44    acb3
22-03-2006 11:21:19    acb3


Og mit resultsæt:

Logged            SessionID
--------------------------------------------------------------
22-03-2006 11:21:19    acb3
22-02-2006 19:01:04    acb2
22-01-2006 23:04:29    acb1
Avatar billede jacknet Nybegynder
27. marts 2006 - 16:31 #5
Altså, så der står hvornår hver enkelt sessionId optræder sidst.
Giver det mening?
Avatar billede michael_stim Ekspert
27. marts 2006 - 16:32 #6
DESC=faldende
ASC=stigende
Avatar billede michael_stim Ekspert
27. marts 2006 - 16:34 #7
Kan ikke lige huske om MAX eksisterer i MS SQL
MAX(Logged)
Avatar billede jacknet Nybegynder
27. marts 2006 - 16:37 #8
michael_stim:
Skal jeg bruge MAX alle steder hvor der står Logged?
Avatar billede michael_stim Ekspert
27. marts 2006 - 16:39 #9
SELECT SessionID, MAX(Logged)
Avatar billede jacknet Nybegynder
27. marts 2006 - 16:41 #10
Jeg får stadigvæk de samme sessionid'er returneret flere gange
Avatar billede arne_v Ekspert
27. marts 2006 - 16:47 #11
SELECT SessionID, MAX(Logged) AS MaxLogged
    FROM tblHitLog
    WHERE Logged > @Since
    AND Logged < @Until
    GROUP BY SessionID
    ORDER BY MAX(Logged) DESC

boer kune give hvert SessionID en gang
Avatar billede arne_v Ekspert
27. marts 2006 - 16:47 #12
MAX er i alle databaser - det har vaeret en del af standard SQL i 20-30 aar
Avatar billede jacknet Nybegynder
27. marts 2006 - 16:52 #13
Cool, det spiller nu. Jeg havde stadigvæk group by logged med.
Smit et svar.
Avatar billede arne_v Ekspert
28. marts 2006 - 02:49 #14
mig ??
Avatar billede jacknet Nybegynder
28. marts 2006 - 08:17 #15
Undskyld, jeg skulle have præciseret.
Jeg mente jer begge, da I begge har hjulpet...
Avatar billede michael_stim Ekspert
28. marts 2006 - 08:49 #16
OK
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