Hallo,
In einer n:m gibt es ein Feld, in dem es drei Werte (0, 1 ,2) geben kann.
Die Tabelle ist nach PK sortiert, die Werte daher in "zufälliger" Reihenfolge.
Ich möchte nun für jede Kombi der beiden FK und jeden Wert den durchschnitt-
lichen Abstand der einzelnen Werte berechnen, - es reicht eine Abfrage für
einen einzelnen Wert.
Das durchschnittlich Auftreten ist ja nicht schwer zu berechnen
Anzahl der DS mit Wert / Anzahl DS gesamt.
Ich bräuchte aber den durchschnittlichen Abstand, Beispiel
das Feld hat die Werte:
2 / 0 / 1 / 2 / 2 / 0 / 2 (hier horizontal wg. Platz)
die Abstände der 0 wären dann 2 und 4 (die Zählung beginnt mit 1 beim nächsten
DS)
der Durchschnitt wäre hier also 3
In dieser Folge 1 / 2 / 0 / 0 / 2 / 0
wären die Abstände 3, 1, 2; durchschnittl. Abstand = 2
Geht das in einer Abfrage? Habe da keine Idee.
Oder geht das nur in VBA mit einer Schleife?
gruss ekkehard
Hallo,
vielleicht geht es ja nur mir so - aber ich habe Deine Abstandsgeschichte nicht verstanden.
Also vor der 0 steht eine 2, da könnte ich mir jetzt die 2 vorstellen. Woher kommt die 4? Ich sehe eine 1 daneben. Der Abstand wäre also 1.
Was für eine Zählung?
Sorry, da blicke ich nicht durch.
Gruß
Christian
Hallo Christian,
Danke für deine Reaktion und Rückfrage.
Ich habe mal ein Bild drangehängt - hoffe du kannst die freihändig eingefügten
Zahlen (Abstände) erkennen.
Im Prinzip ist das eine laufende Nummerierung zwischen zwei 0en (1en oder 2en),
das nächsten Auftreten wird mitgezählt, und beginnt dann wieder bei 1.
Im Bild sind als Beispiel nur die 0en (grün) berücksichtigt.
Das Ergebnis, also der durchschnittliche Abstand, in diesem Fall wäre
(2+2+2+3+1+4)/6 = 2,33
Hoffentlich ist mein Anliegen jetzt verständlicher rübergekommen.
gruss ekkehard
Hallo!
ZitatIm Prinzip ist das eine laufende Nummerierung zwischen zwei 0en
Entspricht das dieser Aussage:
(die Anzahl der Datensätze vor dem jeweiligen Datensatz, solange es keine 0 ist) + 1
bzw.
(die Anzahl der Datensätze ab der letzten 0 bzw. vor dem aktuellen Datensatz, solange keine 0 davor existiert) + 1
SELECT
T.id, T.Z
, (
select Count(*) from DeineTabelle as Z
where Z.id < T.id
and (Z.id > (select Max(ID) from DeineTabelle as X where X.id < T.id and X.Z = 0)
OR (select Max(ID) from DeineTabelle as X where X.id < T.id and X.Z = 0) IS NULL
)
) + 1 as Abstand
FROM DeineTabelle as T
ORDER BY T.id;
Anm.:
id = Autowert bzw. das Feld, das die Sortierung vorgibt.
Z = das Feld mit den Zahlen 0-2.
Gruß
Josef
Hallo Josef,
An diesen Formulierungen des Problems erkennt man den echten Profi, danke.
Ja, so kann man es ausdrücken.
Werde es gleich mal ausprobieren umzusetzen, - melde mich.
gruss ekkehard
@Josef Habe deine Abfrage mit meinen Objektnamen eingerichtet und funzt, -
vielen Dank.
Ich muss jetzt nur noch etwas Zeit in das vollständige Verständnis
investieren.
gruss ekkehard