Listen vergleichen

Deletemaster

Erfahrenes Mitglied
Hallo zusammen,
ich möchte 2 Listen (Tabellen) miteinander vergleichen und die Anzahl sowie die Werte darstellen.
Es handelt sich bei meinem vorhaben um die Lottozahlen.
Ich habe alle [gezogenen Lottozahlen] seit 1955 (über 3600 Datensätze)
datum,
ziehungstag,
zahl1,
zahl2,
zahl3,
zahl4,
zahl5,
zahl6,
zusatzzahl,
superzahl
weiterhin habe ich eine kundentabelle in der die getippten zahlen stehen:
kunr,
zahl1,
zahl2,
zahl3,
zahl4,
zahl5,
zahl6

ich möchte nun selektieren:
welcher kunde hätte/hat mit seine tippzahlen an welchem Datum wieviel Richtige getippt.
Dafür muss ich alle zahlen (ab 3er Kombination) miteinander kombinieren.
ich könnte sicher für jede Möglichkeit eine Abfrage definieren, aber das scheint mir zu aufwendig.
Welche Möglichkeit habe ich die "Liste" der getippten Zahlen mit der "Liste" der gezogenen Zahlen zu vergleichen und mir das Ergebnis ausgeben zu lassen?
Beispiel:
[kunr] hat am [datum] [anzahl_richtige] getippt
zahlen [zahl1], [zahl2], [zahl3], [zahl4], [zahl5], [zahl6], [zusatzzahl]
stimmen ueberein

Habt ihr bitte einen Lösungsansatz für mein Problem?
Danke
 
Nun, wenn du dein Datenmodell anders aufbauen würdest wäre es total simpel:

Tabelle Lottozahlen:
Code:
DATUM
ZIEHTAG
ZAHL#
GEZOGENE_ZAHL
und die Kundentabelle
Code:
KUNDENNUMMER
TIP#
ZAHL#
GERATENE_ZAHL
(d.h. pro Ziehung und Tip 6 Datensätze)

Jetzt kannst du einen JOIN über die GERATENE_ZAHL = GEZOGENE_ZAHL machen,
nach KUNDENNUMMER, TIP#, DATUM und ZIEHTAG gruppieren,
und mit HAVING count(*) > 3 nur Ergebnisse mit mehr als 3 Treffen anzeigen lassen.
 
Vielen Dank für Deine Antwort,
leider kann ich diese Möglichkeit nicht richtig nachvollziehen.
Ich habe doch zwei Tabellen die ich miteinander vergleichen will.
Bei deinem Vorschlag müsste ich also in [zahl#] die zahlen 1-49 eintragen? Also mit Komma getrennt als Aufzählung?
Kannst du mir hierfür bitte einen Beispieldatensatz zeigen?
Die Sache wird wohl sehr umfangreich, da ich 3er, 3er m. zz, 4er, 4er m. zz usw. ausgeben möchte
aber für einen Testdatensatz mit Beispiel-Abfrage bin ich sehr dankbar.
 
Ok, etwas ausführlicher. Mir ist noch eingefallen, dass du ja auch Zusatzzahl etc. auswerten willst also müssen wir das Datenmodell noch etwas anpassen:


Code:
DATUM
ZIEHTAG
ZAHL#
GEZOGENE_ZAHL

Beispielwerte für Lotto am Samstag:
mit 3 8 12 36 41 13, ZZ 9 und Super 6 "852741"
Code:
INSERT INTO ZIEHUNGEN VALUES( TRUNC(SYSDATE), 'SA', 1,  3 );
INSERT INTO ZIEHUNGEN VALUES( TRUNC(SYSDATE), 'SA', 2,  8 );
INSERT INTO ZIEHUNGEN VALUES( TRUNC(SYSDATE), 'SA', 3, 12 );
INSERT INTO ZIEHUNGEN VALUES( TRUNC(SYSDATE), 'SA', 4, 36 );
INSERT INTO ZIEHUNGEN VALUES( TRUNC(SYSDATE), 'SA', 5, 41 );
INSERT INTO ZIEHUNGEN VALUES( TRUNC(SYSDATE), 'SA', 6, 13 );
-- zusatzzahl hat id = 7
INSERT INTO ZIEHUNGEN VALUES( TRUNC(SYSDATE), 'SA', 7, 9 );
-- super 6 hat id = 8
INSERT INTO ZIEHUNGEN VALUES( TRUNC(SYSDATE), 'SA', 8, 852741 );

TAG      ZI      ZAHL# GEZOGENE_ZAHL
-------- -- ---------- -------------
10.05.06 SA          1             3
10.05.06 SA          2             8
10.05.06 SA          3            12
10.05.06 SA          4            36
10.05.06 SA          5            41
10.05.06 SA          6            13
10.05.06 SA          7             9

Beispielwerte für einen TIP:
Code:
KUNDENNUMMER
TIP#  -- oder datum... 
ZAHL#
GERATENE_ZAHL

INSERT INTO TIPS VALUES( 815, 1, 1,  3 );
INSERT INTO TIPS VALUES( 815, 1, 2,  4 );
INSERT INTO TIPS VALUES( 815, 1, 3,  5 );
INSERT INTO TIPS VALUES( 815, 1, 4, 36 );
INSERT INTO TIPS VALUES( 815, 1, 5,  6 );
INSERT INTO TIPS VALUES( 815, 1, 6,  7 );
INSERT INTO TIPS VALUES( 815, 1, 7, 37 );

      KDNR       TIP#      ZAHL# GERATENE_ZAHL
---------- ---------- ---------- -------------
       815          1          1             3
       815          1          2             4
       815          1          3             5
       815          1          4            36
       815          1          5             6
       815          1          6             7
       815          1          7            37

Und nun die Auswertung:
Code:
SELECT	z.tag, z.ziehtag, t.kdnr, t.tip#, count(*)
FROM	ziehungen z JOIN tips t
ON		z.gezogene_zahl = t.geratene_zahl
GROUP   BY z.tag, z.ziehtag, t.kdnr, t.tip#
HAVING	count(*) >= 2;

-- voila, immerhin ein zweier !
TAG      ZI       KDNR       TIP#   COUNT(*)
-------- -- ---------- ---------- ----------
10.05.06 SA        815          1          2

Und wenn man jetzt die JOIN Syntax noch ein bisschen erweiter z.B. mit OR um die Zusatzzahllogik einzubauen ( zahl# = 7 ) dann sollte das so passen oder ?
 
Hallo Exceptionfault,
vielen Dank, daß du Dich mit meinem Problem auseinandergesetzt hast.
Ich bin jetzt ein Stück weiter.
Allerding ist dieses OR unablässig aber wahrscheinlich sehr kompliziert, denn
dein Beispiel geratene_zahlen:
3,4,5,36,6,7 (habe die 7. Zahl weggelassen, da man nur 6 Zahlen ankreuzen kann.

Lotto am Mittwoch (10.05.2006)
gezogene Zahlen:
6,24,33,35,39,47 Zusatzzahl 4 Superzahl 4

Mit der vorliegenden Abfrage ergibt die Ausgabe 3 Richtige, diese Ausgabe ist aufgrund der Abfrage logisch Richtig, denn die Zahl 6 ist einmal im Tip vorhanden
und wurde gezogen
die Zahl 4 ist einaml im Tip vorhanden und wurde als Zusatzzahl UND als Superzahl gezogen. Ergibt 3 Übereinstimmungen.
Deshalb ist eine mögliche Kombination zwischen den Zahlen 1-6 notwendig und als weiteres Kriterium WENN Count(*) >=3 Prüfe Zahl 7 (Zusatzzahl)
Hast du evtl. eine Idee, wie ich das OR-Kriterium einsetzen kann, damit kein 2er mit Zusatzzahl ausgegeben wird?
Auch wenn es nicht so aussieht, aber ich denke auch viel nach und habe einige Dinge ausprobiert (altes Datenmodell).
Die Idee dazu habe ich aufgrund eines Programmes im Internet gefunden, bei dem man "seine" Gewinnzahlen ankreuzen kann, und als Ausgabe erhält:
Zahlen: 3,4,5,36,6,37
Ergebnisliste

*** Leider keinen SECHSER mit SUPERZAHL ***
*** Leider keinen SECHSER ***
*** Leider keinen FÜNFER mit Zusatzzahl ***
*** Leider keinen FÜNFER ***
*** Leider keinen VIERER mit Zusatzzahl***
Ihr Tipp ergab 3 * 4 Richtige
Datum Z1 Z2 Z3 Z4 Z5 Z6 ZZ SZ
10.4.1999 2 3 4 5 6 26 16 4
22.3.1995 3 4 5 29 34 37 27 0
8.12.1984 3 6 36 37 38 49 17 0

Ihr Tipp ergab 8 * 3 Richtige mit Zusatzzahl
Datum Z1 Z2 Z3 Z4 Z5 Z6 ZZ SZ
1.7.1998 3 4 6 23 26 48 36 0
13.3.1996 3 4 13 16 28 36 6 0
15.7.1992 3 6 9 12 23 37 5 0
8.7.1989 2 3 4 7 25 36 6 0
9.9.1987 4 5 6 9 13 24 37 0
2.10.1982 3 5 20 33 37 47 4 0
10.5.1970 3 5 14 36 39 43 37 0
2.6.1957 3 4 14 29 32 37 5 0

Ihr Tipp ergab 68 * 3 Richtige
Datum Z1 Z2 Z3 Z4 Z5 Z6 ZZ SZ
18.2.2006 4 5 6 18 21 40 10 7
12.1.2005 3 5 6 10 30 45 1 3
12.6.2004 3 6 12 13 30 36 45 9
26.7.2003 6 7 18 31 36 37 46 8
15.1.2003 3 5 29 37 42 49 13 0
25.9.2002 3 4 7 25 36 38 44 5
15.6.2002 5 16 23 36 37 39 17 2
7.4.2001 3 9 33 36 37 38 32 3
13.1.2001 4 6 28 31 37 46 10 4
14.6.2000 3 4 6 15 31 43 29 6
13.5.2000 5 6 25 29 37 43 32 6
26.2.2000 3 5 11 27 32 36 43 7
26.1.2000 3 4 21 36 38 46 31 2
8.1.2000 4 6 20 29 31 37 33 8
30.9.1998 4 5 31 36 39 42 9 1
16.5.1998 5 15 22 36 37 43 17 0
7.1.1998 1 6 13 18 36 37 47 0
20.9.1997 6 12 16 36 37 48 31 0
23.4.1997 5 6 24 33 37 43 38 0
17.8.1996 3 5 17 37 47 49 46 0
7.8.1996 2 4 5 6 17 48 24 0
13.3.1996 3 6 13 22 33 36 16 0
11.10.1995 6 10 36 37 41 49 16 0
25.2.1995 3 6 26 34 37 47 41 0
8.2.1995 5 6 14 23 36 39 26 0
19.11.1994 3 4 6 18 46 47 24 0
20.7.1994 4 5 6 7 13 39 18 0
6.7.1994 4 6 34 37 39 45 46 0
15.6.1994 3 4 6 29 41 47 22 0
8.12.1993 4 5 31 36 38 41 17 0
8.9.1993 3 4 5 24 25 46 1 0
19.5.1993 4 5 14 17 24 37 40 0
23.12.1992 2 4 5 21 36 46 35 0
13.11.1991 6 26 31 36 37 45 14 0
16.3.1991 3 5 20 24 36 49 28 0
2.3.1991 2 4 6 33 36 40 31 0
12.9.1990 3 5 6 15 22 41 7 0
9.6.1990 3 9 28 32 36 37 20 0
11.4.1990 3 6 18 33 36 44 21 0
21.3.1990 3 4 26 32 36 49 31 0
3.1.1990 3 5 6 15 43 46 11 0
14.10.1989 3 5 9 27 35 37 23 0
28.6.1989 3 5 7 36 47 49 25 0
31.5.1989 3 16 20 32 36 37 25 0
20.5.1989 5 6 9 35 36 47 33 0
17.5.1989 3 4 6 20 41 48 38 0
16.1.1988 6 17 36 37 42 44 18 0
13.5.1987 1 3 4 11 22 36 44 0
8.4.1987 3 5 6 14 23 34 32 0
1.2.1986 3 6 33 37 42 43 39 0
29.6.1985 4 5 8 15 36 39 45 0
15.9.1979 4 5 7 20 32 37 10 0
30.9.1978 4 5 15 32 37 42 43 0
23.9.1978 3 4 5 8 32 49 33 0
15.7.1978 4 5 6 10 11 28 12 0
28.9.1974 3 4 6 16 23 46 15 0
12.11.1972 3 6 11 27 36 42 40 0
11.7.1971 4 21 34 36 37 41 20 0
17.5.1970 3 5 6 32 38 39 41 0
22.8.1965 3 4 6 12 21 43 42 0
9.5.1965 4 29 31 36 37 49 48 0
7.6.1964 4 5 9 32 37 45 39 0
29.12.1963 5 6 9 16 29 36 28 0
18.8.1963 6 9 11 36 37 45 42 0
21.1.1962 3 5 33 37 45 47 24 0
4.12.1960 3 4 5 13 18 22 17 0
29.11.1959 3 4 5 14 34 49 24 0
25.5.1958 3 6 8 29 37 38 35 0

Diese Abfrage funktioniert im Internet sehr schnell.
Deshalb interessiert mich die Vorgehensweise.
Ich habe vom lotto-berlin.de alle Gewinnzahlen seit 1955!

Vielen Dank für Deine Mühe
Gruß Deletemaster
 
Zurück