J'ai un ensemble de valeurs de date dans Oracle que je suis en train de faire un ORDER BY START_TIME, STOP_TIME
comme dans l'exemple de données ci-dessous. La colonne intitulée NEXT_START_TIME, comme vous pouvez le voir, est récupérée via la fonction LEAD().Gestion des calculs de plage de dates sur plusieurs lignes sans bouclage
START_TIME STOP_TIME NEXT_START_TIME 6/13/2013 5:19 6/13/2013 5:34 6/13/2013 5:19 -- no delay, OK 6/13/2013 5:19 6/13/2013 6:23 6/13/2013 5:39 6/13/2013 5:39 6/13/2013 6:04 6/13/2013 6:23 -- delay? wrong 6/13/2013 6:23 6/13/2013 7:32 6/13/2013 9:18 6/13/2013 9:18 6/13/2013 9:50 6/13/2013 9:44 6/13/2013 9:44 6/13/2013 10:01
Ces données représentent des emplois assignés. La tâche difficile que j'ai est, de la manière la plus efficace, comment déterminer s'il y avait un retard dans l'attribution d'un travail. La première entrée ne représente aucun délai puisque le NEXT_START_TIME est arrivé avant le STOP_TIME. Seulement dans les cas où le NEXT_START_TIME est arrivé après le STOP_TIME pouvons-nous considérer qu'il y a un délai (comme dans la troisième rangée).
La ride est que même si la troisième rangée semble indiquer un retard, ce n'est pas correct. Même si le NEXT_START_TIME était à 6:23, il doit être conscient du fait qu'un travail précédent était encore en cours (voir les deux articles en surbrillance).
Existe-t-il un moyen d'accomplir ceci sans O (N), ou pire, des itérations? À l'heure actuelle, l'utilisation de la fonction LEAD() est très efficace.
S'il vous plaît demander des éclaircissements si nécessaire, car je sais que cela peut être difficile à comprendre.
Brillant! Je ne savais pas que MAX() fonctionnerait de cette manière. Il semble prendre le MAX() jusqu'à et y compris la ligne de transition (où les changements de start_time). – McArthey
Est-il possible de laisser les valeurs NULL dans la colonne STOP_TIME comme NULL et de ne pas les "écraser" avec la valeur MAX()? – McArthey