Avatar billede Slettet bruger
19. september 2004 - 12:48 Der er 19 kommentarer og
1 løsning

Tal der er tættest på et andet tal

Jeg har et tal feks 100

Min opgave er at liste de tal der er tættest på 100 i den rigtige rækkefølge.

De tal der skal listes kunne være:

101
98
96
120
134
199


Tallet 100 er bare et eksempel, det rigtige tal varierer fra gang til gang.

Derudover skal jeg kunne sætte det hele sammen i en SQL sætning hvor funktionen der skal udtænkes skal bruges i en ORDER BY sætning

Kan det lade sig gøre og hvordan :-)
Avatar billede tofte Juniormester
19. september 2004 - 13:31 #1
hvilken database?
Avatar billede tofte Juniormester
19. september 2004 - 13:36 #2
SELECT TOP 20 tall.tal FROM tall ORDER BY abs(50-tall.tal);

hvis access. Tabellen tall indholder feltet tal. Som er det tal som ønskes udvalgt. Hvis du vil have de 20 tal som er tættest på 50, kan ovenstående benyttes.
Avatar billede Slettet bruger
19. september 2004 - 13:55 #3
det er access..men feltet indeholder tekst...

-> tofte

kan du forklare det sidste hvad gør din order by sætning?
Avatar billede Slettet bruger
19. september 2004 - 13:58 #4
mit 'tal' er egentlig en dato i formatet: 2004-09-19-13-58-33 kan man gøre noget med den
Avatar billede tofte Juniormester
19. september 2004 - 15:04 #5
jeg tager et tal og trækker indholdet i det konkrete felt fra, herved får jeg et tal. Dette tal tager jeg den nummeriske værdi, dvs
abs(-x)= og
abs(x)=x
herefter jeg beder den ordne tallene efter deres forskel, altså abs(50-tal). Hvis det er en dato, kan du bruge datediff.


SELECT TOP 20 tall.tal
FROM tall
ORDER BY abs(datediff('m',tall.tal,'29/07/1901'));

hvor 29/07/1901 kan byttes ud med en varabel.
Avatar billede tofte Juniormester
19. september 2004 - 15:06 #6
idén med order er sådan set bare at jeg kun får dem frem med den midste forskel. Jeg begrænser mit dataset ved at lave et opslag på de 20 første poster. Du kan også begrænse med WHERE

SELECT tall.tal
FROM tall WHERE abs(datediff('m',tall.tal,'29/07/1901'))<10
ORDER BY abs(datediff('m',tall.tal,'29/07/1901'));

så får du kun dem som afviger mindre en 10 dage
Avatar billede tofte Juniormester
19. september 2004 - 15:18 #7
hmm det skal nok være et d i stedet for et m, ellers får du differencen i måneder, det er nok ikke meningen, min fejl.
Avatar billede Slettet bruger
19. september 2004 - 16:36 #8
Ok...nu fik jeg dit forslag til at virke men nu har jeg følgende problem. Datoer der er længere ude i fremtiden end dags dato giver jo minus tal hvilket jo kommer før de postive. Det giver følgende resultat:

23-09-04 = -4
19-09-04 = 0
16-09-04 = 3
Avatar billede Slettet bruger
19. september 2004 - 16:37 #9
problemet er at datoen den 19. er mere interessant end den 23...da vi har den 19. idag
Avatar billede Slettet bruger
19. september 2004 - 16:37 #10
kan man på en eller anden måde få den til kun at tage hensyn til positive tal?
Avatar billede tofte Juniormester
19. september 2004 - 16:42 #11
husker du at bruge abs for an datediff?
Avatar billede Slettet bruger
19. september 2004 - 16:52 #12
hvis jeg gør det så ser den således ud:

16-09-2004
19-09-2004   
23-09-2004
Avatar billede Slettet bruger
19. september 2004 - 16:53 #13
PT ser koden ud som følger:

Set RS1 = Conn.execute("Select * from Nyhed where StartDatoBackend  <= '"&dato&"' AND ArkivDatoBackend >= '"&dato&"' Order by abs(Datediff('d',FokusDato,"&datoFe&"))")
Avatar billede tofte Juniormester
19. september 2004 - 17:09 #14
det kan jeg ikke forstå, hvis du bruger det som du lige har postet burde det virke, og der vil kun komme positive tal ud, som den så sorterer efter. Hvilken rækkefølge kommer tallene ud i, hvis du afvikler :
Set RS1 = Conn.execute("Select * from Nyhed where StartDatoBackend  <= '"&dato&"' AND ArkivDatoBackend >= '"&dato&"' Order by abs(Datediff('d',FokusDato,"&datoFe&"))")
Avatar billede Slettet bruger
19. september 2004 - 17:11 #15
16-09-2004
19-09-2004   
23-09-2004
Avatar billede Slettet bruger
19. september 2004 - 17:13 #16
hvad ¨står abs for?
Avatar billede tofte Juniormester
19. september 2004 - 17:17 #17
det virker fint ved mig. Jeg har en tabel(tall) med et felt som hedder tal, det er af typen "dato og tid".
Tabellen indeholder følgende datoer
tal = 16-09-2004
tal = 19-09-2004
tal = 23-09-2004

SELECT TOP 20 tall.tal FROM tall ORDER BY abs(datediff('d',tal,'19-09-2004'));

giver
19-09-2004
16-09-2004
23-09-2004

kan det være noget med dine felttyper?
Avatar billede tofte Juniormester
19. september 2004 - 17:19 #18
absolute number. Altså den nummeriske værdi, således at abs(-3) bliver til 3 og abs(3) fortsat bliver til 3
Avatar billede Slettet bruger
19. september 2004 - 17:29 #19
Ja og nu virker det så også hos mig...kanon..

tak for hjælpen
Avatar billede tofte Juniormester
19. september 2004 - 17:30 #20
det var så lidt.
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
Kurser inden for grundlæggende programmering

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