Avatar billede babytrold Nybegynder
25. september 2008 - 15:05 Der er 7 kommentarer og
1 løsning

Svær dato beregning

Hej,

jeg har et mega stort problem jeg ikke ved hvordan jeg skal løse...

Jeg har nogle rækker med ID, og et dato-felt

86464    2008-09-22 08:48:00.000
86464    2008-09-22 09:46:20.000
70000    2008-09-25 10:50:00.000
70000    2008-09-26 12:10:00.000
70000    2008-09-26 16:01:00.000

Mit problem er at jeg skal for hvert ID beregne om en vis datointerval er overholdt...

for eksempel for ID 86464 er der et datointerval
    2008-09-22 08:48:00.000
    2008-09-22 09:46:20.000

Og her der overholder det for eksempel en grænse på 2 timer.

Den næste ID 70000 er der 2 datointervaler ialt, og jeg skal have svar på om begge overholder grænsen...


70000    2008-09-25 10:50:00.000
70000    2008-09-26 12:10:00.000
70000    2008-09-26 16:01:00.000

HJÆÆÆÆLP!

-Baby
Avatar billede babytrold Nybegynder
25. september 2008 - 15:06 #1
Lige en kommentart til 70000

de 2 datointerval er fra

2008-09-25 10:50:00.000 til 2008-09-26 12:10:00.000

Og næste er

2008-09-26 12:10:00.000 til 2008-09-26 16:01:00.000
Avatar billede fennec Nybegynder
25. september 2008 - 15:48 #2
Spørgsmål.
Du vil for hver ID-gruppe undersøge om intervallerne i mellem max er 2 timer. Er det rigtig forstået??
Avatar billede babytrold Nybegynder
25. september 2008 - 15:55 #3
Ja det er korrekt forstået, og så udskrive hvor mange intervaller der overholder grænsen, og resten som ikke overholder grænsen.

Tabellen indeholder mange records det er bare et eksempel
Avatar billede fennec Nybegynder
25. september 2008 - 16:32 #4
Det kan jeg ikke se kan laves på en nem måde i databsen. Det er heller noget du skal lave i dit program, som henter data fra databsen.
Avatar billede ikuyucu Nybegynder
26. september 2008 - 16:42 #5
Har du prøvet at bruge datediff i dit udtræk?
Du kan se nærmere hvordan det bruges her:
http://msdn.microsoft.com/en-us/library/ms189794.aspx
Avatar billede kentjohansen Nybegynder
26. september 2008 - 19:14 #6
Det kan løses i en stored procedure (sp). Hvis du opretter en sp som følger:
-----------------
CREATE TABLE #DateTableTemp (
  ID INT,
  DateInterval INT
)

DECLARE @Id INT
DECLARE @TheDate DATETIME
DECLARE @CurrentId INT
DECLARE @CurrentDate DATETIME

DECLARE db_cur CURSOR FOR
  SELECT Id, TheDate FROM DateTable ORDER BY ID, TheDate
OPEN db_cur

FETCH NEXT FROM db_cur INTO @Id, @TheDate

WHILE @@FETCH_STATUS = 0
BEGIN
  IF @CurrentId = @Id
    INSERT INTO #DateTableTemp VALUES (@Id, DATEDIFF(n, @CurrentDate, @TheDate))
  ELSE
    SET @CurrentDate = 0

  SET @CurrentId = @Id
  SET @CurrentDate = @TheDate
 
  FETCH NEXT FROM db_cur INTO @Id, @TheDate
END
CLOSE db_cur
DEALLOCATE db_cur

SELECT * FROM #DateTableTemp ORDER BY ID

DROP TABLE #DateTableTemp
-------------------
Så kan du kalde denne sp og få et result set retur med antallet af minutter i hvert interval.
Avatar billede babytrold Nybegynder
29. september 2008 - 13:30 #7
1000 Tak kentjohansen - det var lige det der manglede! Super!!
Avatar billede babytrold Nybegynder
24. august 2010 - 11:21 #8
Kan ikke lukke, da den er lukket i forvejen
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