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
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