2017-09-18 6 views
0

Je suis bloqué en générant une requête SQL. J'ai une table dans un DB de Firebird comme le suivant:Comment obtenir des sous-totaux avec le type de données de temps en SQL?

ID | PROCESS | STEP | TIME 
654 |  1 | 1 | 09:08:40 
655 |  1 | 2 | 09:09:32 
656 |  1 | 3 | 09:10:04 
... 
670 |  2 | 15 | 09:30:05 
671 |  2 | 16 | 09:31:00 

et ainsi de suite.

J'ai besoin des sous-totaux pour chaque groupe de processus (environ 7 d'entre eux). La table a le type "time" pour la colonne TIME.J'ai essayé avec DATEDIFF, mais cela ne fonctionne pas.

+0

Voulez-vous que votre requête retourne le temps passé par chaque étape, ou le temps passé par chaque processus? – p1erstef

+0

Par chaque processus. Je sais que je dois utiliser SUM, mais je n'arrive pas à déterminer quelle combinaison avec d'autres fonctions SQL. – user3189986

+0

Qu'est-ce que vous essayez de faire exactement? –

Répondre

1

Vous devez utiliser SUM

Cette question a été répondue ici.

How to sum up time field in SQL Server

et ici.

SUM total time in SQL Server

Pour la documentation Firebird plus spécifique. Lisez sur la fonction de somme ici.

Sum() - Firebird Official Documentation

+0

Merci pour votre réponse. J'ai lu les messages et j'ai essayé les solutions sans succès. Lorsque j'essaie la solution d'ici [link] (https://stackoverflow.com/q/9725732/2468342) j'obtiens une exception d'évaluation d'expression -> '0:00:00 n'est pas un type TIME' – user3189986

+0

Publier votre requête dans la question. –

1

Je pense que vous devriez utiliser « GROUP BY » pour obtenir le temps et le temps maximum min, et de les utiliser dans la fonction datediff. Quelque chose comme ça:

select process, datediff(second, max(time), min(time)) as nb_seconds 
from your_table 
group by process;