2010-09-30 4 views
1

Désolé pour le titre vague, je ne savais pas comment écrire ça.SQL. Requête pour l'agrégation de certains champs dépendants

Supposons que vous ayez une table, comme le tableau suivant des arrêts sur un train et les distances entre cet arrêt et la suivante:

Stop   NextStop  Distance 
------------------------------------ 
Middletown Bloomsbury  101 
Bloomsbury Shanksville 36 
Shanksville New City  53 
New City  Washington  339 
Washington Andover  48 

Le problème est de déterminer la distance entre les arrêts X et Y. Ainsi Par exemple, la distance entre Middletown et Shanksville est de 101 + 36 = 137.

Existe-t-il un moyen de le faire avec une seule requête? (Idéalement, je cherche un moyen de parcourir itérativement la colonne Arrêts en utilisant le champ NextStop de la rangée précédente comme la clé de la rangée suivante, puis en recueillant leurs distances dans une colonne.)

Merci!

Répondre

0

Dans Oracle, je pense que quelque chose comme cela pourrait fonctionner:

Select sum(distance) 
from train_stops 
start with stop = 'Middletown' 
connect by stop = prior nextstop; 
+0

Merci! Savez-vous s'il existe une solution SQL générale? – Jake

+0

@Jake: Je ne sais pas. Quel SGBD utilisez-vous? Oracle n'est pas le seul à prendre en charge les requêtes récursives, mais la syntaxe peut varier légèrement d'une requête à l'autre. – FrustratedWithFormsDesigner

+0

Je ne suis pas lié à une implémentation particulière. Je voulais dire, j'essayais de résoudre ce problème et il me semblait juste exagéré d'avoir plusieurs requêtes pour chaque segment de distance. Peut-être que mon approche à une seule requête n'est pas correcte. – Jake

Questions connexes