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

SQL - Werte in zwei Tabellen vergleichen - Aus einer Tabelle sollen nur bestimmet Datensätze verwendet werden

Frage Entwicklung Datenbanken

Mitglied: XSD2612

XSD2612 (Level 1) - Jetzt verbinden

08.07.2010, aktualisiert 20:17 Uhr, 23798 Aufrufe, 2 Kommentare

Halllo zusammen, ich habe ein kniffliges SQL - Problem und hoffe mir kann jemand weiterhelfen

Ich habe zwei Tabellen, Tab1, Tab2, die sehen so aus:

Tab1:
Artikel_NrPreisliste_NrDatumPreis
1202010051111,20
210201005117,30
310201005115,60
320201005115,80
330201005116,20
4102010051162,30

Tab2:
Artikel_Nr Preis_KennzeichenDatumPreis
1E2010061210,60
1E2010063010,40
1E2010052011,50
1F2010061011,30
2E200912167,30
2F200908177,50
2G201001137,20
3E200906205,70
3E201004155,60
4E2009061364,20
4G2008060361,20
4G2009021665,40

Nun möchte ich die Artikel finden, die in Tab1 und Tab2 einen unterschiedlichen Preis haben, und zwar unter folgenden Bedingungen:
Nur die Artikel vergleichen, bei denen in Tab1 die Preisliste_Nr = 10 ist.
Diese sollen mit den entspechenden Artikeln in Tab2 verglichen werden, bei denen das Preis_Kennzeichen = E ist und die dort das neuese Datum haben (also wo das Datum am größten ist)

Das Ergebniss sollte so aussehen:
Artikel_Nr Preisliste_NrDatum Preis Artikel_Nr Preis_KennzeichenDatumPreis
1102010051110,3 1E2010063010,40
4102010051162,3 4E2009061364,20

Ich hab das mit folgenden Statement versucht:

select a.Artikel_Nr, a.Preisliste_Nr, a.Datum, a.Preis,
b.Artikel_Nr, b.Preis_Kennzeichen, b.Datum, b.Preis
from Tab1 a, Tab2 b
where a.Artikel_Nr = b.Artikel_Nr
and a.Preisliste_Nr = '10'
and b.Preis_Kennzeichen = 'E'
and a.Preis <> b.Preis;

Als Ergebnis bekomme ich das:
Artikel_Nr Preisliste_NrDatum Preis Artikel_Nr Preis_KennzeichenDatumPreis
1102010051110,31E2010061210,60
1102010051110,31E2010063010,40
1102010051110,31E2010052011,50
310201005115,63E200906205,70
4102010051162,34E2009061364,20

Ist ja auch klar, weil ich in Tab2 die Auswahl nicht auf die Datensätze mit dem neuesten Datum beschränkt hab (b.Datum)

Ich weis aber nicht wie ich das machen soll, ich vermute mit max(b.Datum), weil die Datumswerte so angelegt sind, das die neuesten den höchsten Wert haben. Aber ich habe keine Ahnung wie ich so ein select in das Statement mit einbauen kann

Ich hoffe von Euch kann mir jemand helfen,

Vielen Dank, Matze
Mitglied: Biber
08.07.2010 um 20:36 Uhr
Moin XSD2612,

willkommen im Forum.

Biite bei SQL-Fragen immer das Blech angeben, was drunterliegt.
Denn weniger standardisiert als "SQL" sind nur noch die Rezeptvariationen für "Birne Helene" und deutsche Steuergesetze.

Eine der vielen Möglichkeiten wäre, deine bisherige Abfrage als "innere Abfrage" as is zu erhalten und eine aggregierende Query drumherumzuwickeln.
Oder aber, die Aggregation in einer SubQuery abzufackeln.
Okay, vorher aber noch die bestehende etwas weniger redundant machen.
01.
select  a.Artikel_Nr,  a.Preisliste_Nr,  a.Datum  as Preislistendatum, a.Preis as PL_Preis, 
02.
             b.Preis_Kennzeichen, b.Datum, b.Preis 
03.
from Tab1 a, Tab2 b  
04.
where a.Artikel_Nr = b.Artikel_Nr 
05.
    and a.Preisliste_Nr = '10', 
06.
   and b.Preis_Kennzeichen = 'E' 
07.
   and a.Preis <> b.Preis;
--> Das wäre immer noch "deine" Query, nur ohne doppelte Felder (ist echt nicht nötig) und erst recht ohne doppelte Feldnamen mit unterschiedlichem Inhalt.

Wenn wir jetzt zusätzlich zu "Tab2 b" die Werte aus einer "Grouped By-Tab2" mit Alias c holen

01.
select  a.Artikel_Nr,  a.Preisliste_Nr,  a.Datum  as Preislistendatum, a.Preis as PL_Preis, 
02.
             b.Preis_Kennzeichen, b.Datum, b.Preis 
03.
from Tab1 a, Tab2 b, ( select Artikel_nr, max(Datum) as maxdatum 
04.
                                          from Tab2 
05.
                                            Where   Preis_Kennzeichen = 'E' 
06.
                          Group by Artikel_nr, Preis_Kennzeichen) c 
07.
where a.Artikel_Nr = b.Artikel_Nr 
08.
     and b.Artikel_nr = c.Artikel_nr 
09.
    and a.Preisliste_Nr = '10' 
10.
   and b.Preis_Kennzeichen = 'E'  
11.
   and a.Preis <> b.Preis 
12.
   and b.datum = c.Maxdatum 
13.
;
--> dann sollte es klappen.

Die WHERE-Klausel innerhalb der neuen virtuellen Tabelle c kann ebensogut nach unten - sonst ist das Statement nicht richtig einleuchtend.
01.
select  a.Artikel_Nr,  a.Preisliste_Nr,  a.Datum  as Preislistendatum, a.Preis as PL_Preis, 
02.
             b.Preis_Kennzeichen, b.Datum, b.Preis 
03.
from Tab1 a, Tab2 b, ( select Artikel_nr, Preis_Kennzeichen, max(Datum) as maxdatum 
04.
                            from Tab2  
05.
                          Group by Artikel_nr, Preis_Kennzeichen) c 
06.
where a.Artikel_Nr = b.Artikel_Nr 
07.
     and b.Artikel_nr = c.Artikel_nr 
08.
    and a.Preisliste_Nr = '10' 
09.
   and b.Preis_Kennzeichen = 'E'  
10.
   and b.Preis_Kennzeichen =  c.Preis_Kennzeichen 
11.
   and a.Preis <> b.Preis 
12.
   and b.datum = c.Maxdatum 
13.
;
[ungetestete Skizze]

Grüße
Biber

[Edit] Sorry, das "from Tab2" fehlte bei den beiden Group-by-Varianten unten [/Edit]
Bitte warten ..
Mitglied: XSD2612
09.07.2010 um 08:40 Uhr
Hallo Biber,

vielen Dank für deine Hilfe!!
hat wunderbar funktioniert
Das ganze war für Oracle

Viele Grüße
XSD2612
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst SQL . 2 Felder bzw. Werte vergleichen und Rückmeldung 0 oder 1 (2)

Frage von wawidl zum Thema Datenbanken ...

Entwicklung
gelöst SQL Update aus derselben Tabelle (1)

Frage von winscheil zum Thema Entwicklung ...

Datenbanken
gelöst Hilfe bei MSSQL-Anweisung, Werte in andere Tabelle einfügen (8)

Frage von d4shoerncheN zum Thema Datenbanken ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
Batch & Shell
Skripterstellung Lehrling (22)

Frage von 133119 zum Thema Batch & Shell ...

Exchange Server
Microsoft Exchange Weiterleitung mit anderer primären E-Mail Adresse (14)

Frage von Rene12345 zum Thema Exchange Server ...

Windows Userverwaltung
gelöst Wie verfahrt Ihr mit den Windows-Benutzerkonten und -dateien von ausgeschiedenen Mitarbeitern? (14)

Frage von Bl0ckS1z3 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Devolo DLAN 500 pro Wireless+ (13)

Frage von IceAge zum Thema LAN, WAN, Wireless ...