Avatar billede jthyge Mester
28. april 2021 - 10:35 Der er 2 kommentarer

SQL - Se på foregående værdi, og indregne tiden.

Hej

Jeg har en fungerende SQL Query, der returnere antallet af sekunder en værdi har været i colonne MState, siden et specefikt tidspunkt.

Min Query tager dog ikke tiden med fra '08:05' til en ny værdi logges, da den ser på 'Time_Stamp' > 08:05
Så hvis jeg skal se på hvormange sekunder MState har haft værdien 4, siden kl 08:05, skal se se på om det foregående log har værdien 4. Hvis det har værdien 4 skal sekunder fra 08:05 til 08:10 lægges til SUM.

Nogen der har et forslag til hvordan jeg kan gøre det?

|Time_Stamp                  | MState |
|------------------------|------ |
|2021-04-23 07:50:00    |  3    |
|2021-04-23 08:00:00    |  4    |
|2021-04-23 08:10:00    |  1    |
|2021-04-23 08:22:00    |  2    |
|2021-04-23 08:30:00    |  3    |
|2021-04-23 08:40:00    |  4    |
|2021-04-23 08:50:00    |  1    |
|2021-04-23 09:01:00    |  2    |
|2021-04-23 09:10:00    |  3    |

SELECT SUM(Seconds_In_State) From
(SELECT
    Time_Stamp,
    MState,
  (-1 * TIMESTAMPDIFF(Minute, LEAD(Time_Stamp) OVER(ORDER BY Time_Stamp), Time_Stamp))
AS Seconds_In_State
FROM Mstate
WHERE DATE(`Time_Stamp`) = CURDATE()
AND TIME(`Time_Stamp`) >= '08:05'  /*ShiftStart input tag*/
ORDER BY Time_Stamp) AS T
Where MState = 4;
Avatar billede Rune1983 Ekspert
28. april 2021 - 13:18 #1
Kan det ikke gøres noget ala dette. Ikke testet!

SELECT
m1.Time_Stamp,
TIMESTAMPDIFF(SECOND,m1.Time_Stamp,(SELECT MIN(m2.Time_Stamp) FROM Mstate m2 WHERE m2.MState NOT LIKE 4 AND m2.Time_Stamp > m1.Time_Stamp)) AS 'AntalSekunder'
FROM Mstate m1
WHERE m1.MState = 4
Avatar billede arne_v Ekspert
28. april 2021 - 14:37 #2
Jeg tror at det her er et af de tilfælde hvor en mege simpel SELECT der henter de relevante rækker og så lave beregningen i kode fremfor i SQL vil være en pænere løsning.
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