Top-Themen

Aktuelle Themen (A bis Z)

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
GELÖST

SQL Statment - Neukunden ermittlen

Frage Entwicklung Datenbanken

Mitglied: ottscho

ottscho (Level 2) - Jetzt verbinden

18.11.2009 um 14:45 Uhr, 3477 Aufrufe, 7 Kommentare

Hallo zusammen,

ich habe bei unserem Datenbank das Problem, dass ich gerne Neukunden ermittelt hätte, aber nicht nach Anlagedatum des Kunden, sondern nach Erstauftrag bzw Erstangebot.

Hier mal vereinfacht die beiden Tabellen Struktur.

Kunden: Kundennummer / Kundenname
Angebote: Angebotid / Kundennummer / Bezeichnung / Angebotsdatum

Kunden.Kundennummer = Angebote.Kundennummer (1:N Verbindung)


Nun möchte ich z.B. alle Kunden bekommen, die im Monat Oktober zum ersten Mal (also könnte auch 5 Anfragen sein) eine Anfrage bekommen haben, aber davor noch nie!
Probleme macht mir die Möglichkeit, dass der Kunde im Monat Oktober auch mehr als nur eine Anfrage bekommen haben könnte...

Mein Statment bis jetzt:

01.
SELECT newOffer0.Kundennummer 
02.
  FROM Aufträge as newOffer0 
03.
WHERE ( 
04.
SELECT COUNT(*) as Anzahl  
05.
FROM (SELECT newOffer1.* FROM Aufträge WHERE statecode = 0) as newOffer1 
06.
WHERE newOffer0.Kundennummer = newOffer1.Kundennummer] 
07.
GROUP BY newOffer1.Kundennummer] 
08.
) = 1 
09.
AND Angebotsdatum between '2009-10-01' and '2009-10-31'


So, jetzt zählt er alle Angebote im Oktober und als Nebenabfrage alle Angebote in dem kompletten Stamm, und überall wo es nur 1 Angebot gezählt wurde, ist es ein Neukunde bzw. ein Kunde der im Monat Oktober zum ersten Mal eine Anfrage bekommen hat. Aber wenn der Kunde mehrere Angebote im Oktober bekommen hat, wird er nicht angezeigt.

Wie kann ich das Problem lösen?

Danke
Gruß
ottscho
Mitglied: bytecounter
18.11.2009 um 14:52 Uhr
Hallo,

ohne jetzt näher auf Dein SQL Statement einzugehen, die Anzahl aller Angebote muss mit den Angeboten aus dem Monat übereinstimmen und die Anzahl muss > 0 sein:

COUNT(*) as Anzahl = Angebotsdatum between '2009-10-01' and '2009-10-31' AND Anzahl > 0



vg
Bytecounter
Bitte warten ..
Mitglied: ottscho
18.11.2009 um 15:06 Uhr
Aber die Unterabfrage bezieht sich ja auf den kompletten Datenbestand. und dann werden mir auch die Kunden angezeigt, die vor dem Monat Oktober schon eine Anfrage bekommen haben.
Genau das möchte ich nicht...
Bitte warten ..
Mitglied: bytecounter
18.11.2009 um 16:17 Uhr
Nein, wird nicht. Es werden nur die Kunden angezeigt, die mehr als 0 Bestellungen getätigt haben und die Anzahl der gesamten Bestellungen = der Anzahl der Bestellungen in dem genannten Monat ist.
Hat der Kunde vorher schon bestellt, dann ist Anzahl Gesamtbestellungen > Bestellungen des Monats und die Bedingung ist nicht erfüllt.
Bitte warten ..
Mitglied: ottscho
18.11.2009 um 16:30 Uhr
ok, habe ich verstanden. aber es pass nicht oben in mein statment.
müsste dass dann so aussehen?

01.
SELECT newOffer0.Kundennummer 
02.
  FROM Aufträge as newOffer0 
03.
WHERE ( 
04.
SELECT COUNT(*) as Anzahl  
05.
FROM (SELECT newOffer1.* FROM Aufträge WHERE statecode = 0) as newOffer1 
06.
WHERE newOffer0.Kundennummer = newOffer1.Kundennummer] 
07.
GROUP BY newOffer1.Kundennummer] 
08.
) = (Select COUNT(*) from Aufträge WHERE Angebotsdatum between '2009-10-01' and '2009-10-31' AND Anzahl > 0 )  
09.
AND Angebotsdatum between '2009-10-01' and '2009-10-31'
irgendwie checks ich gerade nicht mehr...
Bitte warten ..
Mitglied: bytecounter
18.11.2009 um 16:45 Uhr
Das Statement passt auch nicht zu Deiner oben genannten Struktur. Du hast einmal newOffer0 und newOffer1.
Solange ich nicht weiß, was aus welcher Tabelle wie gewertet werden soll, kann ich das Statement nicht optimieren.
Bitte warten ..
Mitglied: MadMax
18.11.2009 um 19:17 Uhr
Moin ottscho,

Dein Select hab ich mir mal nicht angetan, das klingt mir für die Aufgabenstellung zu kompliziert. Ich such mir einfach das erste Angebot und les den Kunden dazu, das war doch das Gewünschte, oder?

Da ich Deine Tabellen nicht da habe und auch nicht weiß, was Du überhaupt für eine DB hast, ist das Ganze natürlich ungetestet, sollte aber so passen:
01.
select	k.*, a.MinDatum 
02.
from	Kunden k 
03.
	join (	select	Kundennummer, min (Angebotsdatum) "MinDatum" 
04.
		from	Angebote 
05.
		group by Kundennummer 
06.
		) a on k.Kundennummer = a.Kundennummer 
07.
where	a.MinDatum between '2009-10-01' and '2009-10-31'
Gruß, Mad Max
Bitte warten ..
Mitglied: ottscho
19.11.2009 um 09:31 Uhr
oh man, ist ja easy... vielen dank.
mit min(date) funktioniet es natürlich ganz einfach...

danke
Grüße
ottscho
Bitte warten ..
Ähnliche Inhalte
JavaScript
Wie ermittle ich progressiv md5-Summe bei Multipart-Upload mit blueimp FileUploader?
Frage von TheFreemanJavaScript

Hallo zusammen, Ich benutze folgende Scripts für mein File-Upload-GUI: Mini AJAX File Upload Form Mein Problem liegt darin, dass ...

Datenbanken
SQL Frontend?
Frage von sschultewolterDatenbanken8 Kommentare

Hallo, bin auf der Suche nach einer MySQL Frontend Software. Zum Aufbau: Auf einem Debian Rechner läuft eine MySQL ...

Datenbanken
SQL Server Datenbank in SQL Server Express
gelöst Frage von JuckieDatenbanken3 Kommentare

Hallo zusammen, ist es möglich, eine Datenbank die in Microsoft SQL Server 2008 R2 läuft so zu exportieren, dass ...

PHP
Abfrage SQL
gelöst Frage von dudeldoedelPHP3 Kommentare

Hallo zusammen, kann man das in einer SQL Abfrage erreichen ??? Feldwert lautet: {"565":{"textinput":{"comment":"1400"}}} als Ergebnis soll ausgelesen werden ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 28 SekundenVerschlüsselung & Zertifikate

//Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, gilt das besonders ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 10 StundenWindows 102 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 12 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner3 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement16 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen13 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...