Avatar billede sholm Nybegynder
11. januar 2007 - 09:22 Der er 9 kommentarer og
1 løsning

max-funktion

Hej

Jeg har en tabel i min db:
dato
nummer
pris1
pris2

Der er records i databasen der har det samme nummer men blot med en forskellig dato.

Jeg gerne vil hente dato, nummer, pris1, pris2 på samtlige numre hvor datoen er den dato der ligger tættest på dagsdato men må ikke ligge fremme i tiden.

Jeg har forsøgt med:
SELECT MAX(dato) AS dato, nummer
FROM dbo.Priser
WHERE (dato <= GETDATE())
GROUP BY nummer

Den finder også de rigtige records jeg vil bare gerne have den til at returnere pris1 og pris2 også, men hvis jeg skriver dem i selecten får jeg en fejl med at der ikke er en group by på pris1, pris2 men det skal der jo heller ikke gerne være...
Avatar billede dr_chaos Nybegynder
11. januar 2007 - 09:25 #1
jeg tvivler på at der sker noget hvis du har group by pris1 og pris2
I og med du også har group by nummer på.
Det gælder hvis nummer er et unikt id.
Avatar billede sholm Nybegynder
11. januar 2007 - 09:55 #2
Hvis jeg tilføjer pris1 pg pris2 til selecten og laver Group by nummer, pris1, pris2 så ignorerer den min MAX(dato) og returnerer for mange records.
Avatar billede dr_chaos Nybegynder
11. januar 2007 - 09:58 #3
hmm ok er det fordi et nummer godt kan have flere priser, så det der med kommer til at står flere gange ?
Avatar billede sholm Nybegynder
11. januar 2007 - 10:00 #4
ja
Avatar billede dr_chaos Nybegynder
11. januar 2007 - 10:02 #5
så giver din group by også de rigtige rækker.
Du vil få flere numre og datoer, når du tillader det i din tabel.
Hvad skal du bruge pris1 og pris2 til ?
Avatar billede sholm Nybegynder
11. januar 2007 - 10:12 #6
Tabellen indeholder priser i en produktdatabase:
- dato er den dato hvorfra prisen er gældende, derfor skal jeg have den højeste dato der ikke er fremme i tiden.
- nummer er produktnummeret
- pris1 er en indkøbspris
- pris2 er en udsalgspris

Hele ideen med det er så at jeg skal have hentet de priser der er gældende for et produktnummer. Det har jeg valgt at gøre på følgende måde:
- Den select jeg har i spørgsmålet her er en select der kommer til at ligge i et view.
- Jeg vil så efterfølgende lave en select på dette view med et specifikt nummer.
- Selecten på viewet skulle gerne returnere pris1 og pris2 der er gældende på det pågældende nummer.

Så der kan nemt være 10 records i pris-tabellen hvor det enkelte nummer er med, disse records vil så have forskellige dato hvor prisen er gældende fra og derfor også forskellige priser.

Håber det ga' lidt en ide om hvad jeg skal bruge det til :)
Avatar billede sholm Nybegynder
11. januar 2007 - 11:38 #7
Jeg kan få det til at virke ved at group by nummer, pris, pris2 i mit view og i min select der henter i view'et gøre sådan her:
SELECT TOP 1 * FROM VIEW1
WHERE nummer = 1000
ORDER BY dato DESC

Det virker dog som lidt af en omvej.
Avatar billede dr_chaos Nybegynder
11. januar 2007 - 13:14 #8
jamen det du forsøger at gøre kan ikke lade sig gøre hvis et nummer kan have forskellige priser og dato.
Derfor vil der være flere rækker
Avatar billede sholm Nybegynder
11. januar 2007 - 14:37 #9
Det var da træls så må jeg finde en anden måde at gøre det på, smid et svar så skal du få point.
Avatar billede dr_chaos Nybegynder
11. januar 2007 - 17:22 #10
svar :)
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