WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   SQL-problem med GROUP BY (https://www.wn.se/forum/showthread.php?t=23752)

a_80 2007-09-21 09:20

Hej!

Jag har en tabell med cirka 20 kolumner och 65000 rader.
I denna vill jag ta ut informationen ur 6 eller 7 stycken kolumner, men bara för exklusiva värden i en utav dessa (och då det värdet som tillkom senast). Jag har kommit fram till följande:

SELECT MAX(ID) AS id, Rumsnr
FROM NTA_CHANGES
WHERE (ByggnadNr = 003) AND (ID >= 55981)
GROUP BY Rumsnr
ORDER BY Rumsnr

Den gör nästan precis som jag vill...
Jag skulle vilja lägga till flera kolumner i SELECT-satsen, men då säger den bara att kolumnerna inte är med "either in an aggregate function or in the GROUP BY clause".

Hur gör jag?!?!?!

coredev 2007-09-21 09:43

Hej!

Jag är inte 100% säker på vad du försöker göra, men pröva med nestlade SQL-satser, funkar i alla större RDBMS.

Exempel:

Kod:

select
  *
from
  (select max(id) as id, Rumsnr from NTA_CHANGES group by Rumsnr) as query1,
  NTA_CHANGES
where
  (NTA_CHANGES.ByggnadNr = 003) AND
  (NTA_CHANGES.ID >= 55981) AND
  (NTA_CHANGES.id = query1.id)
order by
  NTA_CHANGES.Rumsnr;

Dvs i den inre sql-satsen hämtar du de id-nummer du söker, och i den yttre hämtar du resten av informationen.

Kan detta vara det du söker?

Kay 2007-09-21 10:57

Vet att jag har haft såna problem innan också. Då jobbade jag mot MS ACCESS och felet avhjälptes genom att varje fält som angavs under SELECT även angavs i GROUP BY, exempelvis:

SELECT ID, Rum, Byggnad, Våning FROM hotell ORDER BY Rum, Byggnad, Våning

Det kanske funkar?

Frej 2007-09-21 11:19

När man använder Aggregerande funktioer (Count, SUM, AVG MAX osv) så tillåter inte SQL att det returneras fler olika värden utanför funktionen som inte går att gruppera på.

Så de kolumner du vill visa utöver (MAX(ID)) måste gå att gruppera. Div de måste innehålla liknande värden.

a_80 2007-09-21 13:18

Coredev - Tack, det fungerar... nästan.
Av någon anledning tappar jag några rader utan synbar anledning :S
Måste undersöka detta och se om jag kan hitta varför just den/de raderna blir uteslutna.

Grillcliff - Dessvärre förstör det lite om jag tar group by på flera kolumner, eftersom den då först söker efter exklusiva värden i kolumnen Rumsnr. Hittar den sedan en dublett för värdet Rumsnr jämför den dessa posters värden i övriga kolumner nämnda i "group by" och om dessa inte matchar inkluderar den de raderna i resultatet. Slutsats: jag får dubletter på vissa värden i kolumnen Rumsnr

//A

Magnus_A 2007-09-21 14:15

Having på slutet kan vara ett sätt att välja i resultatet

Frej 2007-09-21 14:29

En liten fråga bara ByggnadNr är det Integer eller Sträng datatyp, Är det integer så lär 003 bli 3. Och du passar värdet som integer typ.


Alla tider är GMT +2. Klockan är nu 13:21.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson