[MSSQL] Query probleem

Pagina: 1
Acties:
  • 186 views sinds 30-01-2008
  • Reageer

  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
Ik kom er niet echt meer uit :S

Ik heb 2 tabellen.

1ste tabel Heeft een aantal velden maar daar heb ik alleen maar de belangrijkste van nodig.
Namelijk CommID,SiteID,DayStamp en SessionID. De eerste 3 roep ik aan in een where functie. Dus binnen die marge moet ik wat ophalen. De SessionID gebruik ik om Tabel 2 te linken. In Tabel 2 zit een HTTP_USER_AGENT en Die ID.
Er kunnen per DayStamp,CommID,SiteID meerdere SessionID's voorkomen.

Een query om dit te laten zien is bijv
code:
1
2
3
4
5
6
7
8
9
SELECT 
  CommID,SiteID,DayStamp,HTTP_USER_AGENT
FROM 
  tblStats_arc_PageLog T1 LEFT JOIN tblStats_arc_SessionLog T2 
  ON T1.SessionID=T2.ID 
WHERE 
  CommID=600 AND SiteID=2890 
AND 
  DayStamp BETWEEN '11/1/2004' AND '12/1/2004'


Dit werkt. Je krijg keurig een lijst te zien. Het probleem is echter dat ik de meeste gebruikte browser (HTTP_USER_AGENT) wil hebben bij een combi van DayStamp,CommID,SiteID.

Ik heb al aardig wat gebrobeerd met Group etc maar ik krijg het niet voorelkaar :S
Heeft iemand een idee?

Click hier niet


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT TOP 1 
  CommID,SiteID,DayStamp,HTTP_USER_AGENT
FROM 
  tblStats_arc_PageLog T1 LEFT JOIN tblStats_arc_SessionLog T2 
  ON T1.SessionID=T2.ID 
WHERE 
  CommID=600 AND SiteID=2890 
AND 
  DayStamp BETWEEN '11/1/2004' AND '12/1/2004'
GROUP BY
  HTTP_USER_AGENT, DayStamp, SiteID, CommID

Dat zou in de richting moeten komen volgens mij. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:15
Je gebruikt een group by zonder een aggregate function NMe, dat kan niet goed gaan. :P

code:
1
2
3
4
SELECT TOP 1 COUNT(1), HTTP_USER_AGENT, DayStamp
FROM ....
GROUP BY HTTP_USER_AGENT, DayStamp, ....
ORDER BY 1 DESC

zoiets ongeveer

https://fgheysels.github.io/


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

whoami schreef op vrijdag 17 december 2004 @ 12:57:
Je gebruikt een group by zonder een aggregate function NMe, dat kan niet goed gaan. :P
Overblijfsel van teveel werken met MySQL. :X

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
-NMe- schreef op vrijdag 17 december 2004 @ 13:56:
[...]

Overblijfsel van teveel werken met MySQL. :X
Nou, het zal geen foutmelding geven, als je alle rijen die in de select zitten ook on de group by functie stopt is het net alsof er geen group by staat.
Ik wel wel benieuwd wat MySQL dan doet met rijen in de select list waar geen aggregate functie bij staat, en die niet opgenomen zijn in de group by clausule. Kiest MySQL dan zelf maar wat?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • dvvelzen
  • Registratie: Februari 2002
  • Laatst online: 07-08-2025
group by HTTP_USER_AGENT, (andere 3 kolommen)
having count(HTTP_USER_AGENT) = max(count(HTTP_USER_AGENT))

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
dvvelzen schreef op vrijdag 17 december 2004 @ 14:06:
group by HTTP_USER_AGENT, (andere 3 kolommen)
having count(HTTP_USER_AGENT) = max(count(HTTP_USER_AGENT))
Dat gaat niet werken, je mag geen aggregate doen op een aggregate. What whoami heeft geschreven is al goed :)

Oops! Google Chrome could not find www.rijks%20museum.nl


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
ik heb nu dit naar aanleiding van de post hierboven

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT 
  CommID,SiteID,DayStamp,HTTP_USER_AGENT
FROM 
  tblStats_arc_PageLog T1 LEFT JOIN tblStats_arc_SessionLog T2 
  ON T1.SessionID=T2.ID 
WHERE 
  CommID=600 AND SiteID=2890 
AND 
  DayStamp BETWEEN '11/1/2004' AND '12/1/2004'
group by HTTP_USER_AGENT,CommID,SiteID,DayStamp
having count(HTTP_USER_AGENT) = max(count(HTTP_USER_AGENT))


Maar het hele having werkt niet ?

Click hier niet


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
P_de_B schreef op vrijdag 17 december 2004 @ 14:14:
[...]


Dat gaat niet werken, je mag geen aggregate doen op een aggregate. What whoami heeft geschreven is al goed :)
Niet echt :D

Net geprobeerd maar die returned keurig 1 row. En niet wat ik wil. Ik wil namelijk de meeste gebruikte browser per DayStamp. Dus ik moet meer records krijgen.

Click hier niet


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:15
Dan doe je het zo:

code:
1
2
3
select max(count(1)), daystamp, http_user_agent
from ...
group by daystamp, http_user_agent


edit:
Hum, nee, dat gaat niet werken. Een Max op een Count is niet toegestaan.

[ Voor 26% gewijzigd door whoami op 17-12-2004 14:31 ]

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
reapher schreef op vrijdag 17 december 2004 @ 14:28:
[...]


Niet echt :D

Net geprobeerd maar die returned keurig 1 row. En niet wat ik wil. Ik wil namelijk de meeste gebruikte browser per DayStamp. Dus ik moet meer records krijgen.
Dan heeft hij (en ik dus ook) de boel verkeerd begrepen :) Kun je -voor de zekerheid- een voorbeeldlijstje geven met gewenste output?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
Ja hoor np :D

Het lijstje moet er ongeveer zo uit komen te zien.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
600  2890   2004-01-01 00:00:00 Googlebot/2.1 (+http://www.googlebot.com/bot.html)  
600  2890   2004-01-02 00:00:00 Mozilla/4.0 (compatible; grub-client-1.5.3; Crawl your own stuff with http://grub.org)  
600  2890   2004-01-03 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-04 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-05 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-06 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-07 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-08 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-09 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-10 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-11 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-12 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-13 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-14 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-15 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-16 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
600  2890   2004-01-17 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-18 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)   
600  2890   2004-01-19 00:00:00 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)

[ Voor 3% gewijzigd door reapher op 17-12-2004 15:37 ]

Click hier niet


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
SELECT CommId, SiteID, DayStamp , (

SELECT  TOP 1 HTTP_USER_AGENT
FROM   tblStats_arc_PageLog T1 
LEFT JOIN tblStats_arc_SessionLog T2 ON T1.SessionID=T2.SessionID 
WHERE CommId = a.CommId AND SiteId = A.SiteId AND DayStamp = A.DayStamp
GROUP BY CommID,SiteID,DayStamp, HTTP_USER_AGENT
ORDER BY COUNT(HTTP_USER_AGENT) DESC) as Meeste
FROM    tblStats_arc_PageLog a 
LEFT JOIN tblStats_arc_SessionLog b ON a.SessionID=b.SessionID 
GROUP BY CommId, SiteId, DayStamp


Dit werkt denk ik wel, maar iemand die iets beters weet?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
Dat werkt inderdaad en is ook nog snel :D

Ik was so close yet so far :D

Click hier niet


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
Ok next probleem.

Ik ben bezig met packages onder MSSQL om deze informatie op te slaan in een tabel.

de query om de code binnen te halen is:
code:
1
2
3
4
5
6
7
8
9
10
11
SELECT CommId, SiteID, DayStamp ,MainTab,SubTab, (
SELECT  TOP 1 HTTP_USER_AGENT
FROM   tblStats_arc_PageLog T1 
LEFT JOIN tblStats_arc_SessionLog T2 ON T1.SessionID=T2.ID 
WHERE CommId = a.CommId AND SiteId = A.SiteId AND DayStamp = A.DayStamp
GROUP BY CommID,SiteID,DayStamp, HTTP_USER_AGENT
ORDER BY COUNT(HTTP_USER_AGENT) DESC) as Meeste
FROM    tblStats_arc_PageLog a 
LEFT JOIN tblStats_arc_SessionLog b ON a.SessionID=b.ID 
WHERE a.SiteID=2890 AND a.CommID=600 AND a.DayStamp BETWEEN '2-1-2004' AND '2-2-2004'
GROUP BY CommId, SiteId, DayStamp, MainTab, SubTab


Hier komt uit rollen de volgende info
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
600 2890    2004-02-01 00:00:00 -1  2892    Googlebot/2.1 (+http://www.googlebot.com/bot.html)
600 2890    2004-02-01 00:00:00 -1  2893    Googlebot/2.1 (+http://www.googlebot.com/bot.html)
600 2890    2004-02-01 00:00:00 -1  2894    Googlebot/2.1 (+http://www.googlebot.com/bot.html)
600 2890    2004-02-01 00:00:00 0   2891    Googlebot/2.1 (+http://www.googlebot.com/bot.html)
600 2890    2004-02-01 00:00:00 2844    2956    Googlebot/2.1 (+http://www.googlebot.com/bot.html)
600 2890    2004-02-01 00:00:00 2849    0   Googlebot/2.1 (+http://www.googlebot.com/bot.html)
600 2890    2004-02-01 00:00:00 2986    2987    Googlebot/2.1 (+http://www.googlebot.com/bot.html)
600 2890    2004-02-02 00:00:00 -1  2891    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
600 2890    2004-02-02 00:00:00 -1  2892    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
600 2890    2004-02-02 00:00:00 -1  2893    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
600 2890    2004-02-02 00:00:00 -1  2894    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
600 2890    2004-02-02 00:00:00 -1  2993    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
600 2890    2004-02-02 00:00:00 0   2891    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
600 2890    2004-02-02 00:00:00 2842    0   Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)


Nu moet dit in een tabel genaamd tblStats_day_page. Er hoeft maar 1 veld te worden geupdate/insert. Namelijk veld "TopBrowser". Met de volgende velden uit diezelfde query in de where statement: CommId, SiteID, DayStamp ,MainTab,SubTab

Click hier niet


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
:?

code:
1
2
3
INSERT INTO tblStats_day_page (CommId, SiteId, DayStamp, MainTab,SubTab)
SELECT [relevante velden 
[Rest van de query van hierboven]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
Ye dat dacht ik ook :S maar het wilde niet echt werken ofzo? Ik ga het meteen maandag nog eens proberen

Click hier niet


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:15
Het werkt wel.
Je moet er gewoon voor zorgen dat je velden overeenkomen, en dat je geen VALUES keyword hebt.

https://fgheysels.github.io/


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
aha. op die manier. Ik had wel values.

Dus de namen moeten overeen komen?

Click hier niet


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:15
reapher schreef op maandag 20 december 2004 @ 09:16:

Dus de namen moeten overeen komen?
De namen niet; wel het aantal velden en het type van ieder veld, maar dat is logisch.

https://fgheysels.github.io/


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
P_de_B schreef op zaterdag 18 december 2004 @ 08:37:
:?

code:
1
2
3
INSERT INTO tblStats_day_page (CommId, SiteId, DayStamp, MainTab,SubTab)
SELECT [relevante velden 
[Rest van de query van hierboven]
Ok dat werkt. Maar kan het ook met bepaalde velden in de where statement?

Ok i am a idiot. Dat kan natuurlijk niet met een insert :S

Dan moet ik een update gebruiken. Dus mijn vraag kan het met een update?

[ Voor 17% gewijzigd door reapher op 20-12-2004 09:30 ]

Click hier niet


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
reapher schreef op maandag 20 december 2004 @ 09:27:
[...]


Ok dat werkt. Maar kan het ook met bepaalde velden in de where statement?
Ja hoor, je kunt het select statement net zo maken als je zelf wilt. Niet anders dan een gewoon select statement.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
Je kan toch geen where gebruiken in een insert? What the point?

Ik moet dus eigenlijk een update uitvoeren met de gegevens van de bovengenoemde query!

Click hier niet


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
reapher schreef op maandag 20 december 2004 @ 09:34:
Je kan toch geen where gebruiken in een insert? What the point?
Dat kan wel met een INSERT INTO SELECT combinatie

code:
1
2
3
4
INSERT INTO tabel (veld1, veld2)
SELECT bla, foo
FROM AndereTabel
WHERE AndereTabel.Bleh = 'floeh'

Oops! Google Chrome could not find www.rijks%20museum.nl


  • reapher
  • Registratie: Augustus 1999
  • Laatst online: 06-04 20:22
lol :D

dat wist ik helemaal niet.

Ik ga aan de slag.

Click hier niet


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Doe eens shift + F1 in Query Analyzer, er gaat een wereld voor je open ;)

Oops! Google Chrome could not find www.rijks%20museum.nl

Pagina: 1