Avatar billede marzman Nybegynder
17. februar 2009 - 11:06 Der er 6 kommentarer og
1 løsning

slet hvor dato er nyere end dato

Hej Eksperter...

Jeg har et lille problem i et projekt.

Jeg har en db der indeholder store mængder dato. Vi indsætter nye rækker hele tiden og det er derfor vigtigt at to rækker ikke er ens.

Dermed forstået at vi indsætter et nummer (ordrenummer) i en kolone samt meget andet data.

Når jeg indsætter ny data skal jeg tjekke hvis der er 2 med samme ordrenummer. Hvis dette er tilfelde skal jeg slette alle der har en dato der er ældre end den nyeste. Så der kun er en tilbage med samme ordrenummer.

Jeg tænker selv noget i retning af:

DELETE from table WHERE (ordrenumber='mynumber' AND dato < dato)

Dette er dog ikke noget min sql synes er så sjovt... :)


Jeg udvikler i C# og synes det er lidt krævende hvis jeg skal lave mine gennemløb mere avandceret...

Nogle forslag?

Hilsen Kenneth
Avatar billede erikjacobsen Ekspert
17. februar 2009 - 11:08 #1
Måske - ingen garanti:

DELETE from table WHERE (ordrenumber='mynumber' AND dato < getdate())

Er ordrenummer et tal-felt? Og er dato et DATE eller DATETIME felt?
Avatar billede marzman Nybegynder
17. februar 2009 - 11:21 #2
"
DELETE from table WHERE (ordrenumber='mynumber' AND dato < getdate())
"
det er forkert!
Fordi den skal jo ikke finde dem der er nyere end lige nu og slette dem.  (det vil være alle i 100% af tilfældene)

Mit dato felt er DateTime og ordrenumber er for såvidt lige gyldigt da det blot bliver valgt hvilke rækker der skal kigges på.
Avatar billede erikjacobsen Ekspert
17. februar 2009 - 11:28 #3
"alle der har en dato der er ældre end den nyeste" er så ikke dags dato?

Så kan du finde den nyeste dato:

DELETE from table WHERE ordrenumber='mynumber' AND dato <
  ( SELECT max(dato) FROM table AS t2 WHERE t2.ordenummer='mynumber' )

Igen uden garanti... ;)
Avatar billede erikjacobsen Ekspert
17. februar 2009 - 11:28 #4
Måske

DELETE from table WHERE ordrenumber='mynumber' AND dato <
  ( SELECT max(t2.dato) FROM table AS t2 WHERE t2.ordenummer='mynumber' )
Avatar billede marzman Nybegynder
17. februar 2009 - 11:32 #5
"alle der har en dato der er ældre end den nyeste" er så ikke dags dato?
Nej ikke nødventigvis da jeg godt kan indsætte en ny som ikke har dagsdato, men en dato som er ældre.
Avatar billede marzman Nybegynder
17. februar 2009 - 11:38 #6
DELETE from table WHERE ordrenumber='mynumber' AND dato <
  ( SELECT max(t2.dato) FROM table AS t2 WHERE t2.ordenummer='mynumber' )

Den ser ud til at virke med denne.

jeg har testet for flere rækker så der fx. var 4 med samme ordrenumber. Den tager den hvor datoen er nyest og sletter de andre.

Lige som jeg ville have det. :)

mange tak for hjælpen...
smider du et svar?
Avatar billede marzman Nybegynder
17. februar 2009 - 11:40 #7
sorry... jeg tager det selv som et svar så...
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