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

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