Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Aufeinanderfolgende gleiche Datensätze zählen

Frage Entwicklung Datenbanken

Mitglied: etnobommel1989

etnobommel1989 (Level 1) - Jetzt verbinden

09.02.2011 um 22:39 Uhr, 7523 Aufrufe, 16 Kommentare

Ich habe eine Tabelle "Münzwurf", bestehend aus 2 Spalten.
1 Spalte : Durchgang (Autowert)
2 Spalte: Kopf_oder_Zahl

Hi Leute,

und zwar hab ich keine Ahnung wie ich da ran gehen soll. Ich suche eine SQL Anweisung mit der ich die größte Anzahl von gleich aufeinander folgenden Datensätze zähle.

z.B.

z,z,z,z,z,k,k,k,z,z,z,k,k,k,k,k,k,k,k,k,z,z,k,z,k,z,k,z

Wenn dies die Würfe nacheinander wären, würde ich gerne eine Abfrage haben, welche mir die Zahl 9 ausgibt, weil an der eine Stelle 9 mal nacheinander Kopf geworfen wurde.

Ich denke zwar schon das ich mich in SQL ein wenig auskenne, habe aber keinen richtigen Lösungsansatz.

Vielen Dank
Mitglied: nxclass
09.02.2011 um 23:33 Uhr
Da wirst Du wohl eine PROCEDURE erstellen müssen und mit einem CURSOR arbeiten.

Benutzt Du MySQL ? - ich hab morgen etwas Zeit, dann versuch ich das mal zu lösen.
Bitte warten ..
Mitglied: nxclass
10.02.2011 um 08:54 Uhr
meine Lösung: (für MySQL)
01.
DELIMITER // 
02.
CREATE PROCEDURE `getMaxKopfOderZahl`(OUT maxKopf INT UNSIGNED, OUT maxZahl INT UNSIGNED) 
03.
BEGIN 
04.
  DECLARE sCache VARCHAR(255) DEFAULT ''; 
05.
  DECLARE sKoZ CHAR(1); 
06.
  DECLARE sKoZ_last CHAR(1) DEFAULT 'x'; 
07.
  DECLARE bDone INT DEFAULT 0; 
08.
 
09.
  DECLARE cCursor CURSOR FOR SELECT `kopf_oder_zahl` FROM `kopf_oder_zahl`; 
10.
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET bDone = 1; 
11.
 
12.
  OPEN cCursor; 
13.
  SET maxKopf = 0; 
14.
  SET maxZahl = 0; 
15.
  REPEAT 
16.
    FETCH cCursor INTO sKoZ; 
17.
    IF sKoZ_last <> sKoZ THEN 
18.
      CASE sKoZ_last 
19.
        WHEN 'k' THEN IF (CHAR_LENGTH(sCache) > maxKopf) THEN SET maxKopf = CHAR_LENGTH(sCache); END IF; 
20.
        WHEN 'z' THEN IF (CHAR_LENGTH(sCache) > maxZahl) THEN SET maxZahl = CHAR_LENGTH(sCache); END IF; 
21.
        ELSE BEGIN END; 
22.
      END CASE; 
23.
      SET sCache = ''; 
24.
      SET sKoZ_last = sKoZ; 
25.
    END IF; 
26.
    SET sCache = CONCAT(sCache, sKoZ); 
27.
  UNTIL bDone END REPEAT; 
28.
  CLOSE cCursor; 
29.
END // 
30.
DELIMITER ; 
31.
 
32.
CALL getMaxKopfOderZahl(@k, @z); 
33.
SELECT @k AS `Kopf`, @z AS `Zahl`;
Bitte warten ..
Mitglied: G.Wallenstein
10.02.2011 um 21:36 Uhr
Hallo,

das geht sicher mit einer einfachen Abfrage.

SELECT MAX(Anzahl)FROM
(SELECT COUNT(W) AS Anzahl FROM TW GROUP BY W) AS MaxAnzahl

W ist Das Feld
TW die Tabelle

Grüße
Günter
Bitte warten ..
Mitglied: nxclass
10.02.2011 um 22:47 Uhr
SELECT MAX(Anzahl)FROM
(SELECT COUNT(W) AS Anzahl FROM TW GROUP BY W) AS MaxAnzahl
... hast Du das mal getestet mit den Daten von oben ?
Bitte warten ..
Mitglied: G.Wallenstein
10.02.2011 um 22:54 Uhr
Nee, aber mit einer anderen Tabelle.
Vorausgesetzt die Daten stehen pro Wurfergebnis in einem Satz der Tabelle.
Also
SPALTE W
z
z
z
z
z
k
k
k
....
Sonst bräuchte man ja keine Tabelle, ein Textfile würde es auch tun..

LG
Bitte warten ..
Mitglied: nxclass
11.02.2011 um 09:06 Uhr
das ich mich in SQL ein wenig auskenne
z,z,z,z,z,k,k,k,z,z,z,k,k,k,k,k,k,k,k,k,z,z,k,z,k,z,k,z
... das war ja nicht das Problem

ABER: ich hab mich auch nicht zufrieden gegeben und noch etwas experimentiert. Folgende Lösung gibt es noch:
01.
SET @iCount = 0; 
02.
SET @sLast = 'x'; 
03.
SELECT `kopf_oder_zahl`, COUNT(`KoZ_Group`) AS `Anzahl` 
04.
FROM ( 
05.
  SELECT 
06.
    @sLast AS `sLast`, 
07.
    @iCount:=IF(@sLast<>`kopf_oder_zahl`,@iCount+1,@iCount) AS `KoZ_Group`, 
08.
    @sLast:=`kopf_oder_zahl` AS `kopf_oder_zahl` 
09.
  FROM `kopf_oder_zahl` 
10.
) _tmp 
11.
GROUP BY `KoZ_Group` 
12.
ORDER BY `Anzahl` DESC 
13.
LIMIT 1;
Ihr könnt Gott zu mir sagen ... )))
Bitte warten ..
Mitglied: etnobommel1989
12.02.2011 um 10:13 Uhr
Vielen Dank für eure zahlreichen Antworten,

ich werds jetzt gleich mal ausprobieren, konnte nur bis jetzt noch nicht, weil ich vorgestern operiert werden musste.

Vielen Dank
Bitte warten ..
Mitglied: etnobommel1989
12.02.2011 um 10:41 Uhr
Achso Leute ich hab das jetzt mal probiert,

ich hab die ganzen Daten im Access und wenns geht wäre es nett wenn ihr den Quelltext Access tauglich formuliert, weil da kommt immer die Fehlermeldung "Unzulässige SQL Anweisung: INSERT, CREATE, SELECT oder UPDATE erwartet"
Bitte warten ..
Mitglied: nxclass
12.02.2011 um 14:55 Uhr
den Quelltext Access tauglich formuliert
... soweit mir bekannt ist, kann Access dies nur in Verbindung mit VBA - da kann ich Dir leider nicht weiter helfen.

(ggf. ein neues Thema unter Windows-Office-Access mitit einem Verweis erstellen)
Bitte warten ..
Mitglied: etnobommel1989
12.02.2011 um 14:57 Uhr
Achso na gut dann weiß ich wenigstens Bescheid, da werd ich mal ne Weboberfläche gestalten und diese mit ner mysql Datenbank connecten
Bitte warten ..
Mitglied: Biber
12.02.2011 um 16:51 Uhr
Moin etnobommel1989,

das Problem bei deiner Anforderung ist nicht Access oder mySQL, VBA oder Stored Procedure,
sondern dass du keine Fragestellung hast, die irgendetwas mit Datenbank zu tun hat.

Einer Datenbanktabelle ist die (physikalische) Anordnung von Datensätzen vollkommen egal -
daher ist die Frage "wie oft kommen Sätze von Typ X hintereinander vor" vollkommen off topic.

Mit einem SELECT in Access ist natürlich lösbar, aber eben nur, wenn du es rein handwerklich-rechnerisch angehst.
01.
Select 'k' as [Kopf/Zahl],  Max(Iif(Isnull(bisZ), (select max(durchgang) from Münzwurf), bisZ) - dk+1) as MaxLängeSeq from (  
02.
  SELECT Mk.Durchgang as Dk ,  
03.
 (select min(  Mz.Durchgang) from Münzwurf mz where Kopfzahl='z' and durchgang >=mk.durchgang) as bisZ 
04.
  FROM Münzwurf mk where Kopfzahl ='k' 
05.
06.
Union 
07.
Select 'z' , Max(Iif(Isnull(bisk),(select max(durchgang) from Münzwurf), bisk) - dz+1) as MaxLängeSeq from (  
08.
  SELECT Mz.Durchgang as Dz ,  
09.
  (select min(  Mk.Durchgang) from Münzwurf mk where Kopfzahl='k' and durchgang >=mz.durchgang) as bisk 
10.
  FROM Münzwurf mz where Kopfzahl ='z' 
11.
)
Diese Abfrage bringt dir in zwei Zeilen die längste Immer-wieder-Kopf- bzw Immer-wieder-Zahl-Sequenz.

Hat aber mit SQL oder mit Datenbank nix zu tun - ist nur der Beweis "ich kann auch auch einen Dübel mit der Bohrmaschine in die Wand kloppen."

Grüße
Biber
Bitte warten ..
Mitglied: etnobommel1989
13.02.2011 um 13:48 Uhr
Vielen , vielen Dank du bist mein persönliche werd Held, ich werd in Zukunft genauer überlegen was ich wo rein schreibe, ich probiers gleich mal aus
Bitte warten ..
Mitglied: etnobommel1989
13.02.2011 um 14:38 Uhr
Irgendwie geht gar nix, also es rührt sich nix, weder Fehlermeldung noch sontiges??
Bitte warten ..
Mitglied: Biber
13.02.2011 um 16:39 Uhr
Moin etnobommel1989,

hmm, "gar nix, weder Fehlermeldung noch sonstiges", das ist ungewöhnlich..
Bildschirm ist eingeschaltet?

Okay, ich habe in meiner SQL-Emulation ein bisschen geschlampt, was die Feldnamen angeht.

Die Tabelle, die ich durchflöhe heißt "Münzwurf" und hat zwei Felder
  • "Durchgang" , Autowert
  • "Kopfzahl" , Text, Inhalt 'k' für Kopf oder 'z' für Zahl ----> Bei dir heisst das Feld allerdings "Kopf_oder_Zahl".

Bitte ersetze in meinem SQL alle Vorkommnisse von "Kopfzahl" durch "Kopf_oder_Zahl".

Grüße
Biber
Bitte warten ..
Mitglied: Biber
19.02.2011 um 13:11 Uhr
Moin etnobommel1989,

kann ein Haken an den Beitrag, kommen noch Fragen, kann es kompostiert werden?

Bitte um Feedback hier im Forum - hier hast du doch auch welches bekommen...

Grüße
Biber
Bitte warten ..
Mitglied: rakodani
09.06.2012 um 17:34 Uhr
Hi,

ich habe jetzt versucht den Dübel mit der Bohrmaschine in die Wand zu kloppen. Aber ich habe ein Problem.
Ich habe es für meine Datenbank abgewandelt.
Ich möchte die Tabelle [Fifa 10] und das Feld [Daniel Tore] durchsuchen, wie oft hintereinander Daniel 3 Tore geschossen hat. Leider bekomme ich von Access immer folgende Fehlermeldung:

Die Unterabfrage in diesem Ausdruck hat eine fehlerhafte Syntax.
Prüfen Sie die Syntax der Unterabfrage, und setzen Sie die Unterabfrage in Klammern.
Mein Code sieht im Moment so aus:

= Select 3 as [Kopf/Zahl], Max(Iif(Isnull(bisZ), (select max(durchgang) from [Fifa 10]), bisZ) - dk+1) as MaxLängeSeq from (
SELECT Mk.Durchgang as Dk ,
(select min( Mz.Durchgang) from [Fifa 10] mz where [Daniel Tore]=5 and durchgang >=mk.durchgang) as bisZ
FROM [Fifa 10] where [Daniel Tore] =3
)
ich habe erstmal nur den ersten Teil realisieren wollen.
Ich bin aber sowieso mit diesem Code noch nicht am Ziel. Ich würde gerne Prüfen wie oft hintereinander das Feld [Daniel Tore] größer als das Feld [Tobias Tore] ist und umgekehrt. Also wer wie oft hintereinander gewonnen hat (Siegesserie). Ist dies auch über Access zu realisieren?

Viele Grüße und vielen Dank

Daniel
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Hyper-V
gelöst Hyper-V gleiche Datenträger-ID bzw. Volume-ID (10)

Frage von Bernd16 zum Thema Hyper-V ...

Microsoft Office
gelöst Excel Formeln - Zählen der Anzahl eindeutiger Zellwerte mit einer Nebenbedingung (4)

Frage von Booster07 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (15)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...