Avatar billede d_warma Nybegynder
02. februar 2006 - 19:40 Der er 5 kommentarer

Tid mellem transaktioner

Hej,

Jeg har en tabel med en masse transaktioner, hvor jeg ønsker at vide hvor lang tid der er mellem transaktionerne.

Jeg har:

Kunde...TransaktionsDato...Dage siden sidste trans
1      01-01-2006        N/A
1      20-01-2006        19
2      03-01-2006        N/A
2      08-01-2006        5
2      01-02-2006        24

Hvordan gør man det i Access?
Avatar billede mugs Novice
02. februar 2006 - 19:53 #1
Perioden mellem 2 datoer finder ved hjælp af funktionen DateDiff.
Avatar billede mugs Novice
02. februar 2006 - 19:58 #2
F.eks sådan i en forespørgsel:

Udtryk1: DateDiff("d";[dato];Date())

Som finder forskellen mellem feltet dato og dags dato målt i dage. Men det er nok ikke det du vil - Du vil finde den første transaktionsdato for en enkelt kunde og den sidste transaktionsdato for samme kunde.
Avatar billede d_warma Nybegynder
03. februar 2006 - 19:03 #3
Det er såmænd ikke noget problem at finde forskellen mellem den første og den sidste transaktion. Der er en datediff (min, max)
Problemet ligger i at finde forskellen mellem transaktionerne når der er mere end 2.
Avatar billede kabbak Professor
03. februar 2006 - 20:11 #4
Koden sættes i et modul


****** start kode ******

Option Compare Database

Dim SidsteDato As Date
Dim SidtsteKundenummer As Long
Public Function Datoforskel(Kundenummer As Long, Dato As Date)
    If SidtsteKundenummer = 0 Or Kundenummer > SidtsteKundenummer Or SidtsteKundenummer > Kundenummer Then
        SidsteDato = Dato
        SidtsteKundenummer = Kundenummer
        Datoforskel = "N/A"
        Exit Function
    End If
    Datoforskel = (Dato - SidsteDato)
    SidsteDato = Dato
End Function
*********** end kode *******
SQL, ret selv til dine felter

SELECT KundeBesøg.Kunde, KundeBesøg.Dato, Datoforskel([Kunde],[Dato]) AS Dage
FROM KundeBesøg
ORDER BY KundeBesøg.Kunde, KundeBesøg.Dato;
Avatar billede jesperthomsen Nybegynder
14. februar 2006 - 09:59 #5
Jeg ville bruge en parametriseret forespørgsel og lave en funktion i stil med den her:

Public Function FindDateDiff(byval KundeNr as long, byval Dato as date) as String
static qdfTrx as querydef
dim rsTrx as recordset

  if qdfTrx is nothing then
    set qdfTrx = currentdb.createquerydef("")
    qdfTrx.sql = currentdb.querydefs("pTrx").sql ' Undgår databasebloating
  end if

  qdfTrx.parameters!KundeNr = KundeNr
  qdfTrx.parameters!Dato = Dato

  set rsTrx = qdfTrx.openrecordset

  if rsTrx.eof then
    FindDateDiff = "N/A"
  else
    FindDateDiff = fix(Dato - rsTrx!Dato)
  end if

  rstrx.close
  set rsTrx = nothing

end function

Forespørgslen pTrx skal have to parametre; kundenr og dato og skal finde kunder med kundenummer = parameteren kundenummer og dato < parameter-dato, sorteret faldende på dato.

Jeg har bare tastet koden ind, så det er ikke sikkert den kan kompileres.
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

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