Avatar billede Slettet bruger
24. marts 2006 - 11:19 Der er 35 kommentarer og
1 løsning

Funktion der vælger seneste dato

Jeg har en tabel indeholdende en række datoer. Opgaven er at udvælge en værdi (pris) fra den record der indeholder den seneste dato. HJÆLP!!!!
Avatar billede jensen363 Forsker
24. marts 2006 - 11:22 #1
Max(dato) returnerer normalt den nyeste
Avatar billede fennec Nybegynder
24. marts 2006 - 11:25 #2
select top 1 pris from dinTabel order by dato desc
Avatar billede Slettet bruger
24. marts 2006 - 11:42 #3
Der er mange varenr. og der kan være datoer ude i fremtiden (seneste OK dato er d.d. (dato<=date())
Avatar billede fennec Nybegynder
24. marts 2006 - 11:56 #4
select top 1 pris from dinTabel where dato<=date() and varenr=123 order by dato desc
Avatar billede Slettet bruger
24. marts 2006 - 12:15 #5
fennec> Det virker principielt OK, MEN udvælger kun varer med dato=240306 selvom eksempelvis 230306 ville være OK for andre varer......
Avatar billede fennec Nybegynder
24. marts 2006 - 12:23 #6
Hvilken datatype er datofeltet i databasen??
Avatar billede Slettet bruger
24. marts 2006 - 12:37 #7
dato og klokkeslæt
Avatar billede fennec Nybegynder
24. marts 2006 - 12:44 #8
Det kan jeg ikke forstå. Den er jo netop sat til at vælge dem hvor "dato<=date()"...

Hvordan har du tilpasset den, så den vælger det rigtige varenr??
Avatar billede Slettet bruger
24. marts 2006 - 12:47 #9
Det må være fordi den pgså tager hensyn til varenummeret der SKAL være med i forespørgslen.
Avatar billede fennec Nybegynder
24. marts 2006 - 12:50 #10
Ja, du skal have varenummeret med....
Avatar billede Slettet bruger
24. marts 2006 - 13:01 #11
Hvis jeg fjerner "dato<=date()" udvælger den kun een vare (der er kun een vare der har dato efter d.d.) DVS at den udvælger de arer der har den nyeste dato påhæftet, men ikke vaer med ældre datoer. Hvordan løses det?
Avatar billede fennec Nybegynder
24. marts 2006 - 13:08 #12
Lad os lige tage den fra starten.

Du vil i EN select gerne have en liste af alle varenumre og deres aktuelle pris.
Der kan være flere priser på hver vare, men det er den seneste (som ikke er efter dagsdato) du vil have ud???
Avatar billede Slettet bruger
24. marts 2006 - 13:09 #13
jeps
Avatar billede fennec Nybegynder
24. marts 2006 - 13:15 #14
Så er vi ude i noget lidt avanceret:

SELECT v.id, v.name, (select top 1 price from vare2price vp where vp.vareID=v.id) from Vare v
Avatar billede fennec Nybegynder
24. marts 2006 - 13:16 #15
Glemte lige dato betingelsen:

SELECT v.id, v.name, (select top 1 price from vare2price vp where vp.vareID=v.id and vp.dato<=date()) from Vare v
Avatar billede Slettet bruger
24. marts 2006 - 13:20 #16
kan du forklare brugen yderligere?
Avatar billede fennec Nybegynder
24. marts 2006 - 13:28 #17
Første del er en select af alle varenumre
SELECT v.id, v.name from Vare v

Dernæst har vi en select til at trække prisen ud for hver enkelt nummer:
select top 1 price from vare2price vp where vp.vareID=123 and vp.dato<=date()

Denne smides så ind som en subselect på select listen, og 123 sættes til at henvise til varens id (som jo er fremmednøgle). Det giver os:

SELECT v.id, v.name, (select top 1 price from vare2price vp where vp.vareID=v.id and vp.dato<=date()) from Vare v
Avatar billede Slettet bruger
24. marts 2006 - 13:32 #18
Den fiser desvære ikke helt ind. Hvis jeg kan få dig til at tilrette min kode der kun tager varenr. med den 24.03. med kommer du klart med i min aftenbøn :-)

SELECT TOP 1 Varesalgspris.Varenr_, Varesalgspris.[E-handelspris], Varesalgspris.Startdato
FROM Varesalgspris
WHERE (((Varesalgspris.Startdato)<=Date()))
ORDER BY Varesalgspris.Startdato DESC;
Avatar billede fennec Nybegynder
24. marts 2006 - 13:36 #19
Der skal bruges en tabel til.
Der skal være en med alle Varenr i.
Avatar billede fennec Nybegynder
24. marts 2006 - 13:37 #20
... Den tabel som Varesalgspris.Varenr referere til...
Avatar billede Slettet bruger
24. marts 2006 - 13:40 #21
Alle relevante varenr. er i tabellen Varesalgspris
Avatar billede Slettet bruger
24. marts 2006 - 13:52 #22
Her er der yderligere tilknyttet en tabel Vare som det vil skulle se ud i den endelige forespørgsel: (hvis du kan løse problemet kan vi let give dig en "præmie")
SELECT TOP 1 IIf([Vare]![Beskrivelse] Like "DVD*","1","0") AS Master, IIf([Vare]![Typekode]="DVD","DVD",IIf([Vare]![Typekode]="VHS","VHS",IIf([Typekode]="UMD","UMD",""))) AS Type, Vare.Nummer AS Varenr, Vare.Beskrivelse AS Varenavn, IIf([Beskrivelse] Like "DVD*",Mid([Vare]![Beskrivelse],5),[Beskrivelse]) AS Kaldenavn, IIf([Vare]![Typekode]="DVD","Film",IIf([Vare]![Typekode]="VHS","Film",IIf([Vare]![Typekode]="PSX2","PlayStation",IIf([Vare]![Typekode]="PLAKAT","Plakater")))) AS Produktnavn, Varesalgspris.[E-handelspris] AS Pris1, "" AS Vægt, [Vare]![Lagerbeholdning]-[Vare]![Antal i salgsordre]-[Vare]![Antal i købskreditnota] AS Beholdning1, IIf([Vare]![Typekode]="PLAKAT",5,IIf([Vare]![Typekode]="PSX2",2,IIf([Vare]![Typekode]="VHS",IIf(Date()-[Vare]![Frigivelsesdato]<15,25,IIf(Date()-[Vare]![Frigivelsesdato] Between 15 And 30,10,0)),IIf([Vare]![Typekode]="DVD",IIf(Date()-[Vare]![Frigivelsesdato]<15,25,IIf(Date()-[Vare]![Frigivelsesdato] Between 15 And 30,10,0)))))) AS Minimumsbeholdning, "" AS Leveringstid, Vare.Genre, Vare.Frigivelsesdato, Vare.Provisionsgruppe AS Reference, IIf([Beskrivelse] Like "DVD*",Mid([Vare]![Beskrivelse],5),[Beskrivelse]) AS Billedkaldenavn, Vare.Leverandørnr_, Varesalgspris.Startdato INTO Navision
FROM Vare INNER JOIN Varesalgspris ON Vare.Nummer = Varesalgspris.Varenr_
WHERE (((Vare.Provisionsgruppe)>0) AND ((Varesalgspris.Startdato)<=Date()))
ORDER BY Varesalgspris.Startdato DESC;
Avatar billede Slettet bruger
24. marts 2006 - 14:01 #23
Nu tror jeg den er der, jeg har siddet med noget lignende....

Løsningen blev at lave en forespørgsel som finder max dato med kriterie <=Date() for hver varenummer. Du har så en forespørgsel med alle varenumre med deres sidste dato.

Så laver du en ny forespørgsel hvor de forbinder din oprindelige tabel med den nye tabel både på varenr og dato. Så vil du have søgesættet du skal bruge og kan så frit tage af de andre oplysninger, som pris osv...

Held og lykke!~)
Avatar billede Slettet bruger
24. marts 2006 - 14:24 #24
spg> hvordan finder du maxdato pr. varenr.?
Avatar billede Slettet bruger
24. marts 2006 - 14:27 #25
Lige et øjeblik..
Avatar billede Slettet bruger
24. marts 2006 - 14:27 #26
Hvis jeg bruger Maks og <=Date() medtager den ikke datoer efter d.d.
Avatar billede Slettet bruger
24. marts 2006 - 14:28 #27
Skal den medtage datoer efter d.d. så kan du bare fjerne kriteriet..
Avatar billede Slettet bruger
24. marts 2006 - 14:30 #28
Det er jeg klar over, men hvis der er en dato efter d.d. skal den tage den seneste før...
Avatar billede Slettet bruger
24. marts 2006 - 14:32 #29
Er det ikke det som <=Date() gør?~)
Avatar billede Slettet bruger
24. marts 2006 - 14:33 #30
Forresten det med at finde max eller last er ved at lave en faldende sortering på dato..
Avatar billede Slettet bruger
24. marts 2006 - 14:35 #31
Jeg kan ikke huske om du er nød til at lave sorteringen før max forespørgslen..
Avatar billede Slettet bruger
24. marts 2006 - 14:41 #32
Maks og <=Date() overstyrer hinanden, så jeg ikke får arer ud hvis den sidste dato er 25-03-06!
Avatar billede Slettet bruger
24. marts 2006 - 14:50 #33
Jeg brugte det i en db, hvor der var dato, ingrediens og batchnummer. De tastede så ind når de tog hul på en ny batch. Så skulle man kunne indtaste en dato og så skulle man se hvilke batchnumre der var i brug på den dato..

Løsningen:
Forespørgsel1
Faldende sortering på dato
Forespørgsel2
Brug forespørgsel1 til at finde max dato og feltet ingrediens
(i forespørgsel 1 eller 2 kan du indsætte dit dato kriterie, det burde selvfølgelig være i forespørgsel 1)
Forespørgsel3
Her satte jeg forespørgsel2 sammen med den oprindelige tabel, forbandt både dato og ingrediens. Dvs. så står vi med den oprindelige tabel men kun med den seneste dato før dato kriteriet!~)
Avatar billede Slettet bruger
24. marts 2006 - 15:03 #34
Hvem ønsker points - det virker med spg's løsning i flere omgange.
Avatar billede Slettet bruger
24. marts 2006 - 15:04 #35
God weekend!~)
Avatar billede Slettet bruger
24. marts 2006 - 15:05 #36
Tak for hjælpen
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