Avatar billede bas Forsker
31. maj 2008 - 00:37 Der er 10 kommentarer og
1 løsning

Find profiler oprettet / opdateret inden for x antal dage

Jeg søger hjælp til at lave en SQL-forespørgsel, der
finder profiler / records, som er oprettet / opdateret
inden for de seneste tre måneder fra dags dato.

Dags dato skal ikke være en fast bestemt dato, men datoen
for den pågældende dag man vælger at køre forespørgslen.

Datoen for tre måneder tilbage skal heller ikke være en
fast bestemt dato, men datoen, der er tre måneder tilbage
i forhold til datoen for kørslen af forespørgslen.

Ja, det lyder vist lidt kryptisk, men jeg håber det giver
mening. Spørg endeligt.

Jeg er blevet hensvist til
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

og funktionerne DATE_ADD(NOW(), INTERVAL 1 DAYS og DATEDIFF(),
men jeg forstår ikke, hvordan jeg skal bruge det og sætte det sammen.

Jeg kan godt se, at jeg må skulle "måle på" forskellen imellem
dags dato NOW() og tre måneder tilbage, men jeg har ikke set
lyset endnu.

Jeg ved ikke, om man også kan gøre noget med at trække 90 dage
fra dags dato?

På forhånd tak.

Mvh. Martin
Avatar billede arne_v Ekspert
31. maj 2008 - 01:17 #1
prøv:

SELECT *
FROM tabel
WHERE opdateret > DATE_SUB(NOW,INTERVAL 3 MONTH)
Avatar billede arne_v Ekspert
31. maj 2008 - 01:17 #2
hov - jeg glemte nogle parenteser:

SELECT *
FROM tabel
WHERE opdateret > DATE_SUB(NOW(),INTERVAL 3 MONTH)
Avatar billede bas Forsker
31. maj 2008 - 01:54 #3
Hej Arne

Mange tak!

Det ser umiddelbart ud til at fungere.

Det næste bliver så, at jeg vil prøve at
lave en if-sætning i php, der finder de
profiler / records, som ikke er blevet
oprettet / opdateret inden for intervallet
på de tre måneder.

Den skal måske hedde noget med if $oprettet
!= DATE_SUB(NOW(),INTERVAL 3 MONTH) {
DELETE WHERE ........= .......
}

eller noget i den retning.

Jeg regner med, at du nok skal få
points uanset hvad.

Jeg prøver bare lige at konstruere
videre.

Mvh. Martin
Avatar billede arne_v Ekspert
31. maj 2008 - 02:12 #4
prøv og erstat:

>

med

<=
Avatar billede bas Forsker
31. maj 2008 - 10:38 #5
"prøv og erstat:

>

med

<="

altså i SELECT * FROM tabel WHERE opdateret > DATE_SUB(NOW(),INTERVAL 3 MONTH)

Sådan: SELECT * FROM tabel WHERE opdateret <= DATE_SUB(NOW(),INTERVAL 3 MONTH)?

Hvilken forskel gør det? Det er mindre end eller lig med dags dato ikke?


I den kørsel, der skal slette profiler, som ikke ligger inden for de tre måneder
kan måske bare skrive noget med:

DELETE * FROM tabel WHERE opdateret != OR < DATE_SUB(NOW(),INTERVAL 3 MONTH)?
Avatar billede arne_v Ekspert
31. maj 2008 - 22:58 #6
mindre end eller lig med (dags dato - 3 måneder)

prøv først med:

SELECT * FROM tabel WHERE opdateret <= DATE_SUB(NOW(),INTERVAL 3 MONTH)

og hvis det virker så brug:

DELETE FROM tabel WHERE opdateret <= DATE_SUB(NOW(),INTERVAL 3 MONTH)
Avatar billede bas Forsker
02. juni 2008 - 17:10 #7
Hej Arne + evt. andre

Jeg har lige været ved at kigge på det igen,
og umiddelbart ser de forespørgsler, du har skrevet,
ud til til at gøre det rigtige.

Jeg skal lige have det skåret det ud i pap.

Altså..

Når jeg vil finde de profiler, som ER blevet
opdateret inden for de senestre 3 måneder,
så kan jeg bruge:

SELECT * FROM tabel WHERE opdateret > DATE_SUB(NOW(),INTERVAL 3 MONTH)


Når jeg vil finde de profiler, som IKKE er blevet opdateret inden for
de seneste 3 måneder, så kan jeg bruge:

SELECT * FROM tabel WHERE opdateret <= DATE_SUB(NOW(),INTERVAL 3 MONTH)

Når jeg vil slette de profiler, som IKKE er blevet opdateret inden for
de seneste 3 måneder, så kan jeg bruge:

DELETE FROM tabel WHERE opdateret <= DATE_SUB(NOW(),INTERVAL 3 MONTH)

Er det rigtigt forstået?


Og DATE_SUB trækker det angivne interval
fra dags dato (NOW) eller hvordan?

Mvh. Martin
Avatar billede arne_v Ekspert
03. juni 2008 - 02:52 #8
Ja.  (men test lige på lidt test data inden du sletter de rigtige data !!)

Ja.
Avatar billede bas Forsker
06. juni 2008 - 10:10 #9
Hov arne

Du skal da vist lige have nogle points for alt det her ;-)

Mange tak for hjælpen.

Mvh. Martin
Avatar billede arne_v Ekspert
06. juni 2008 - 15:14 #10
svar
Avatar billede bas Forsker
06. juni 2008 - 19:22 #11
Hej Arne

Endnu en gang mange tak.

God weekend.

Mvh. Martin
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