Avatar billede mozie Nybegynder
19. november 2010 - 11:26 Der er 6 kommentarer og
1 løsning

Find nyeste observation i query

Jeg har to tabeller som er linket sammen. Tabel 1 hedder tblProduct og indeholder en masse oplysninger om mine produkter og er opbygget med følgende felter:

ProductID
ProductName

Tabel 2 hedder tblPrice og indeholder priserne på produkterne og er bygget op til at indeholde historik. Derfor har tabellen følgende felter:

Price_ID
ProductID
Year_Price (dato-felt)
Price

ProdutID er linket sammen i en en-til-mange relation.

Nu vil jeg så gerne lave en query hvor jeg får alle produkter ud med den senest opdaterede pris. Jeg har søgt på google og i andre fora og har fundet ud af at man måske kan bruge funktionen DMAX - men jeg er simpelthen ikke god nok til queries til at kunne klare denne. Derfor må svaret også meget gerne være MEGET pædagosik forklaret... På forhånd mange tak for hjælpen
19. november 2010 - 13:32 #1
Denne query skulle goere det:

SELECT p1.*, p2.price, MAX(p2.datum)
FROM tblProduct p1 JOIN  tblPrice p2 ON p1.ProductID = p2.ProductID
GROUP BY p1.ProductID
Avatar billede hnteknik Novice
19. november 2010 - 15:11 #2
Hvis N producter og samme opdateringsdato så prøv

Select Top N ........ ORDER BY Year_Price DESC
21. november 2010 - 21:29 #3
mozie, modtog du mit indlaeg?  I saa fald er jeg spaendt paa din reaktion.  Proevede du mit kode forslag?  I saa fald hvordan gik det?  Eller rendte du ind i problemer?  I saa fald fortael.

Jeg oprettede dette som svar fordi jeg, indtil jeg hoerer det modsatte, mener at koden i mit indlaeg #1 loeser det stillede problem.
Avatar billede mozie Nybegynder
22. november 2010 - 09:19 #4
Jeg er også sikker på din løsning virker, men jeg kan ikke få den til at virke :-)

Jeg har kopieret din query ind og får følgende fejl

"Syntax Error in FROM clause"

som sagt er jeg ikke skarp i SQL så jeg ved ikke om der er noget jeg skal ændre for at få det til at virke.

Hvad betyder p1 og p2?

på forhånd tak
22. november 2010 - 12:09 #5
Jeg oversaa at spoergsmaalet var oprettet under kategorien Access.  Access paalaegger flere restriktioner end standard SQL.

p1 og p2 er dovenskab (eller effektivitet) fordi jeg finder det nemmere at skrive p1.ProductID end tblProduct.ProductID.  Fordi ProductID findes i to tabeller er man noedt til at fortaelle hvilken man bruger, saa jeg gav tabellerne kaldenavnene p1 og p2.

Jeg lavede en mini Access applikation (som jeg kan emaile hvis du vil) med dine to tabeller og lidt data i.  Denne query:

SELECT p1.ProductID,  ProductName, Price, Year_Price
FROM tblProduct AS p1 INNER JOIN tblPrice AS p2 ON p1.ProductID = p2.ProductID
WHERE Year_Price IN (SELECT MAX(Year_PRICE) FROM tblPrice GROUP BY ProductID)

gav dette resultat hvilket ifoelge dataerne i tabellen er den sidste pris for hvert produkt og datoen for denne pris.

ProductID ProductName Price Year_Price
1          navn1          127,00          1-1-2005
2          navn2          305,00          2-2-2005
Avatar billede mozie Nybegynder
22. november 2010 - 12:10 #6
Det virker - mange tak for løsningen.. Jeg prøvede mig lidt frem. Super smart med p1 og p2....
22. november 2010 - 12:12 #7
Det var du ikke laenge om at afproeve (hvis det er #5 du mener.)  Tak for points.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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