Avatar billede lyngedrengen Nybegynder
13. maj 2003 - 21:32 Der er 10 kommentarer og
2 løsninger

Finde max værdi i recordset

Hejsa

Jeg har en tabel med følgende (forsimplede) udseende:

ArtikelID  Maaned    Aar
1              06      02
2              06      02
3              03      03
4              03      03

Jeg vil så gerne kunne vise de sidste nye artikler og til det skal jeg kunne lave en sql, der finder max værdi af aar og af disse finder max værdien af maaned.

Den kan jeg ikke lige knække - hjælp! :-)
Avatar billede skovtrold Nybegynder
13. maj 2003 - 21:36 #1
Du kan istedet hente de nyeste ud fra ID.
Jeg går ud fra du har autonummerering på dit ID-felt, og derfor vil den nyeste artikel også have det højeste ID, så derfor kan du hente vha. ID'et.
Så skal du bare selecte og "ORDER BY ID DESC"
Avatar billede lyngedrengen Nybegynder
13. maj 2003 - 21:54 #2
Hej Skovtrold

Tak for svaret. Jo jeg har AutoID på, men alle mulige historiske artikler vil med tiden og blive lagt ind, så jeg er nødt til at lave det på den anden måde. Ellers tak for buddet!

VH
Jan
Avatar billede -master-d- Nybegynder
13. maj 2003 - 21:56 #3
SQL = "SELECT MAX(Maaned) From Tabel WHERE Aar = ("SELECT MAX(Aar" From Tabel)"
Avatar billede -master-d- Nybegynder
13. maj 2003 - 21:57 #4
Lille fejl

SQL = "SELECT MAX(Maaned) From Tabel WHERE Aar = ("SELECT MAX(Aar) From Tabel")"
Avatar billede lyngedrengen Nybegynder
13. maj 2003 - 22:01 #5
Hej Master D!

Tak for svaret. Checker det ASAP i morgen aften - håber det er ok.

VH
Jan
Avatar billede proaccess Nybegynder
14. maj 2003 - 08:33 #6
Du kan evt også bruge:

SELECT TOP 1 * FROM Tabel ORDER BY Aar DESC, Maaned DESC;
Avatar billede lyngedrengen Nybegynder
15. maj 2003 - 20:45 #7
->Master D: Der er et eller galt med syntaksen. Hvis jeg copy/paster din sql får jeg en "expected end of statement" fejl.

Jeg har prøvet mig lidt frem og følgende:
Sql = "SELECT MAX(Maaned) From artikler WHERE Aar = (SELECT MAX(Aar) From artikler)"
Virker syntaksmæssigt, men giver et tom resultat (formoder jeg), da jeg får en fejl når jeg henter data fra SQL'en (Response.write nyestenummer("Overskrift"), der hedder "Item cannot be found in the collection corresponding to the requested name or ordinal.". Overskrift er en variabel i tabellen. Tabellen hedder i øvrigt artikler.

Hvis jeg benytter:
Sql = "SELECT * From artikler WHERE Aar = (SELECT MAX(Aar) From artikler)"

Får jeg et korrekt resultat på Aar, men det er jo desværre ikke nok.

Nogen idéer? :-)

->Proaccess: Tak for forslaget, men der vil typisk være flere artikler i resultatet, så derfor ved jeg ikke om det skal være en Top 1, top 5, top 20 etc. sortering....Andre idéer?

Vh
Jan
Avatar billede -master-d- Nybegynder
15. maj 2003 - 21:51 #8
Prøver igen så

Hvis du siger at denne virker

Sql = "SELECT * From artikler WHERE Aar = (SELECT MAX(Aar) From artikler)"

er det jo godt nok så..

Så prøv med


Sql = "SELECT MAX(Maaned), Overskrift From artikler WHERE Aar = (SELECT MAX(Aar) From artikler) ORDER by Maaned DESC"

Så virker Response.write nyestenummer("Overskrift"), ihvert fald også.

Du kan så selv tilføje resten af de felter du geren vil have på sådan her :

Sql = "SELECT MAX(Maaned), Overskrift, NytFelt, NytFelt.... "


Håber du forstår hvad jeg mener.


Pointen i at du får fejlen :

"Item cannot be found in the collection corresponding to the requested name or ordinal."

Er blot at jeg jo kun havde sat den til at finde Max(Maaned) og intet andet så når du laver en forespørgsel på feltet "overskrift" vil den naturligvis sige at feltet ikke eksisterer i dit recordset.
Avatar billede lyngedrengen Nybegynder
15. maj 2003 - 22:07 #9
Hej igen

Det giver desværre en "[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'Overskrift' as part of an aggregate function."

Men nu fangede jeg da pointen med den tidligere fejlkommando ;-)
Avatar billede lyngedrengen Nybegynder
15. maj 2003 - 22:19 #10
Fifler med dette:

Sql = "SELECT * FROM Artikler Where Maaned = (Select MAX(Maaned) From artikler WHERE Aar = (SELECT MAX(Aar) From artikler))"

Men det giver kun resultatet af Max på måneder og altså uafhængigt af aar, hvilket jeg ikke helt forstår
Avatar billede lyngedrengen Nybegynder
15. maj 2003 - 22:48 #11
Sådan - har løst det således:
sql1= "Select Top 1 * From Artikler ORDER by aar DESC, maaned DESC"
set aartemp = Conn.Execute(Sql1)

maxaar=aartemp("Aar")
maxmaaned=aartemp("maaned")

Response.write aartemp("aar")
Response.write aartemp("maaned")

Sql = "Select * From Artikler WHERE Aar=" & maxaar & "AND Maaned="& maxmaaned

Måske ikke den smarteste måde, men det virker :-)

Har splittet pointene imellem Jer - håber det er ok. Takker for hjælpen.
Avatar billede lyngedrengen Nybegynder
15. maj 2003 - 22:49 #12
PS: Response.write linjerne var blot for at se outputtet af variablene
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