Antworten auf deine Fragen:
Neues Thema erstellen

Hilfe für SQL Abfrage gesucht

TTron

Nicht mehr ganz neu hier

Moin allerseits ;-)

Irgendwie scheint das hier das einzige passende Unterforum zu sein .. falls die Anfrage doch woanders hin gehört, bitte verschieben.

Ich stehe scheinbar ein wenig auf der Leitung. Meine SQL Abfrage funktioniert zwar, aber leider nicht zu 100% so wie sie soll.

Das wäre die Abfrage:
Code:
SELECT     a.arb_ord_bcd
,          substr(a.arb_ord_nr,1,8)
,          a.arb_ord_aufl
,          a.arb_ord_zae
,   substr(a.auf_mz,1,4)
,          a.sap_lag_ort
,          a.sap_lei_zen
,          b.da_org_kap_nr3||b.da_org_kap_nr4
,          a.da_ext_prio
,  to_char(min(c.dat_neu), 'DD.MM.YY')
,      min(lpad(kalender.fbk_tag,5,0) )
,          b.rck_mld_art
,  to_char(b.mtx_ist_end,' DD.MM.YY')
,          lpad(fabrikkalender.fbk_tag,5,0)
,          d.text
FROM       auaupo a
,          aubapo b
,          svsv04 c
,          buss.dlz_text d
,          svsv02 fabrikkalender
,          svsv02 kalender
where      a.arb_ord_ap  = 'P'
       and b.kap_nr1     = '63'
       and b.da_org_kap_nr3 = '0408'
       and b.rck_mld_art = 'F'
       and c.rck_mld_art in ('I','S','V','R')
and a.arb_ord_ap     = b.arb_ord_ap
and a.arb_ord_bcd    = b.arb_ord_bcd
and a.arb_ord_ap     = c.arb_ord_ap
and a.arb_ord_bcd    = c.arb_ord_bcd
and b.da_org_kap_nr3 = c.kap_ist_nr3
and b.da_org_kap_nr4 = c.kap_ist_nr4
and b.da_org_kap_nr3 = d.kst
and b.da_org_kap_nr4 = d.apl
and fabrikkalender.kal_id = 1
and to_char(b.mtx_ist_end,'YYMMDD')=
               to_char(fabrikkalender.fbk_gre_dat,'YYMMDD')
and (fabrikkalender.fbk_gre_dat BETWEEN TO_DATE('&1','DD.MM.YYYY')
        AND TO_DATE('&2','DD.MM.YYYY'))
and kalender.kal_id = 1
and to_char(c.dat_neu,'YYMMDD')=
               to_char(kalender.fbk_gre_dat,'YYMMDD')
group by
           a.arb_ord_bcd
,          a.arb_ord_nr
,          a.arb_ord_aufl
,          a.arb_ord_zae
,          a.auf_mz
,          a.sap_lag_ort
,          a.sap_lei_zen
,          b.da_org_kap_nr3||b.da_org_kap_nr4
,          b.rck_mld_art
,          a.da_ext_prio
,          b.mtx_ist_end
,          lpad(fabrikkalender.fbk_tag,5,0)
,          d.text;

Mein Problem ist hier:
Code:
,  to_char(min(c.dat_neu), 'DD.MM.YY')
,      min(lpad(kalender.fbk_tag,5,0) )

Ich bekomme zwar das richtige Datum für dat_neu, aber die Zuordnung von fbk_tag funktioniert nicht. In der Tabelle kalender sind unsere Arbeitstage hinterlegt. Die Arbeitstage selbst sind als 5 stellige Zahl vorhanden, aber für Wochenenden und Feiertage ist nur eine Null vorhanden. Somit ist bei einer gewissen Anzahl von Datensätzen der Arbeitszähltag falsch zugeordnet.

Wie müsste ich die Abfrage anpassen, damit ich das kleinste Datum von c.dat_neu incl. dem passenden kalender.fbk_tag bekomme, wo der Status von c.rck_mld_art 'I','S','V' oder 'R' ist. Und zwar nicht für jeden Status einen Datensatz, sondern jeweils nur einen einzigen Datensatz. Nämlich den, der das älteste Datum hat und einem dieser Stati entspricht.

Gruß
Jens
 

Duddle

Posting-Frequenz: 14µHz

AW: Hilfe für SQL Abfrage gesucht

Kannst du bitte ein paar Beispieldatensätze zeigen / generieren, sowie die aktuelle und die gewünschte Ausgabe angeben? Ich persönlich kann aus den kryptischen Abkürzungen nicht wirklich rauslesen, was das bedeuten soll und welche Typen dabei benutzt werden.


Duddle
 

rafoldi

Aktives Mitglied

AW: Hilfe für SQL Abfrage gesucht

Wenn Du an der Stelle ein subquerry einfügst dann klappt es. Da ich nicht weiß was für eine DB Engine Ihr einsetzt kann ich da leider nicht mehr zu sagen.
 

TTron

Nicht mehr ganz neu hier

AW: Hilfe für SQL Abfrage gesucht

Hmmm .. scher darzustellen. Es sind ja mehrere Tabellen ...

a ist die Tabelle mit den Grunddaten zu einem Auftrag
b ist die Tabelle mit Infos welche Arbeitsgänge in einem Auftrag sind (jeweils mit Status des einzelnen Arbeitsgangs)
c ist die Tabelle mit den Details zu den Arbeitsgangstati (wann wurde ein Status verändert)
d sind nur Textinfos
fabrikkalender bzw. kalender sind quasi dieselbe Tabelle. Dort sind alle Arbeitstage mit Nummer und dem dazu passenden Datum hinterlegt. Feiertag oder Wochenende = Keine fortlaufende Nummer, sondern 5 Nullen.

Das hier ist die Ausgabe eines Datensatzes:

411039765 50102731 203 00 60 35 63 0408070 REC 14.06.13 0 F 17.06.13 12511 Kennzeichnen

Wichtig ist da das Datum 14.06.13 und die nachfolgende 0. Die Null sagt das es ein Arbeitszähltag ist, der auf ein Wochenende bzw. Feiertag fällt. Der 14. ist aber ein Freitag ... und an Stelle der 0 müsste dort 12510 stehen.

die Datensätze in der Tabelle zu den Stati sehen (gekürzt) so aus:

0408 070 F 17.06.13
0408 070 S 15.06.13
0408 070 I 14.06.13
 

TTron

Nicht mehr ganz neu hier

AW: Hilfe für SQL Abfrage gesucht

@Ralf: Wie würde ein Subquery aussehen?
Das ganze läuft über SQLPLUS (ORACLE)

Gruß
Jens
 

Duddle

Posting-Frequenz: 14µHz

AW: Hilfe für SQL Abfrage gesucht

und an Stelle der 0 müsste dort 12510 stehen
Und wie berechnet sich diese Zahl? Ich sehe die 12511, also könnte ich naiv annehmen anstelle der 0 muss 12511-1 (bzw. allgemein der Inhalt vom "Feld mit 12511" - 1) stehen.

[OffTopic]
Übrigens bist du (bis auf eine Übersetzung des Wortes) der einzige, der das Wort "Arbeitszähltag" benutzt. Es ist daher nicht besonders aussagekräftig für die Erklärung eines ohnehin schon verwirrenden Problems.
[/OffTopic]


Duddle
 

TTron

Nicht mehr ganz neu hier

AW: Hilfe für SQL Abfrage gesucht

Sorry ... die Arbeitszähltage werde vom System automatisch berechnet, auf Grundlage von dem Zeitpunkt der Einführung, sollte aber doch egal sein wie das berechnet wird. Die sind in der Tabelle fest hinterlegt.

Die 12511 ist der 17.06.2013 (Montag)

Auszug aus der Tabelle:

13.06.2013 12509 Donnerstag
14.06.2013 12510 Freitag
15.06.2013 00000 Samstag
16.06.2013 00000 Sonntag
17.06.2013 12511 Montag
18.06.2013 12512 Dienstag
 

Duddle

Posting-Frequenz: 14µHz

AW: Hilfe für SQL Abfrage gesucht

Dann musst du das erzeugte Datum
Code:
to_char(min(c.dat_neu), 'DD.MM.YY')
mit der Datumsspalte in der kalender-Tabelle im WHERE vergleichen. Im Kreuzprodukt sind ja schon alle Daten vorhanden, es wird nur irgendwo falsch rausgefiltert oder gruppiert.

Du kannst ja mal euren Datenbankspezi fragen, der diese Abfrage geschrieben hat. Irgendwas muss er sich dabei ja gedacht haben (hoffe ich).


Duddle
 

TTron

Nicht mehr ganz neu hier

AW: Hilfe für SQL Abfrage gesucht

Das mache ich doch bereits ... ?

Code:
and to_char(c.dat_neu,'YYMMDD')=
               to_char(kalender.fbk_gre_dat,'YYMMDD')

Wenn ich die min() Bedingung bei
Code:
min(lpad(kalender.fbk_tag,5,0) )
raus nehme, dann wird es ja auch richtig zugeordnet. Dann bekomme ich aber mehrere Datensätze als Ergebnis angezeigt.

Hier würde ich dann 2 Datensätze bekommen:

0408 070 F 17.06.13
0408 070 S 15.06.13
0408 070 I 14.06.13

Da würde ich einen Datensatz bekommen mit 14.06. , weil dort I gemeldet wurde und einen mit 15.06. weil dort S gemeldet wurde.

Die Frage ist jetzt nur wo ich anders filtern bzw. anders gruppieren muss!?
Unser Datenbankspezi ist im Urlaub und der zweite der das konnte ist seit 3 Wochen im Ruhestand :(
 

Duddle

Posting-Frequenz: 14µHz

AW: Hilfe für SQL Abfrage gesucht

Ein Schuss in's Blaue, weil ich mir nicht direkt vorstellen kann, wie deine Daten und Zwischenergebnisse aussehen, aber: du vergleichst ein Datum mit dem in fbk_gre_dat, aber nicht das kleinste, so wie im eigentlichen SELECT.
Hier ist das Datum im WHERE:
Code:
to_char(c.dat_neu,'YYMMDD')=
               to_char(kalender.fbk_gre_dat,'YYMMDD')
Hier ist das Datum im SELECT:
Code:
to_char(min(c.dat_neu), 'DD.MM.YY')
Wenn es das nicht ist, kann ich auch nicht mehr helfen (ohne direkt die DB bzw. etwas vergleichbares selbst zu benutzen).


Duddle
 

TTron

Nicht mehr ganz neu hier

AW: Hilfe für SQL Abfrage gesucht

Hmmm ... danke erst mal für deine Mühe. Ich versuche die Abfrage jetzt umzubauen und ein Subselect zu benutzen. Evtl. komme ich da eher weiter.

Gruß
Jens
 

rafoldi

Aktives Mitglied

AW: Hilfe für SQL Abfrage gesucht

das mit dem SubSelect wird klappen, denn hier hast Du die Möglichkeit mit MIN oder MAX etc. zu arbeiten. In der Regel kann dieser SubSelect auch als Join hinterlegt werden. Würde ich nur nutzen wenn das Statemend Gefahr läuft unübersichtlich zu werden oder wenn mehrere Felder benötigt werden.

Ohne Syntax Prüfung, so könnte es gehen. da ich in der Regel mit MSSQL arbeite nutze ich für solche Dinge einen anderen Weg. Ich erzeuge mir hierbei eine Partition.
SELECT a.arb_ord_bcd
, substr(a.arb_ord_nr,1, 8 )
, a.arb_ord_aufl
, a.arb_ord_zae
, substr(a.auf_mz,1,4)
, a.sap_lag_ort
, a.sap_lei_zen
, b.da_org_kap_nr3||b.da_org_kap_nr4
, a.da_ext_prio
, to_char(min(c.dat_neu), 'DD.MM.YY')
, (select min(lpad(kalender.fbk_tag,5,0) ) from svsv02 kalender where kalender.kal_id = 1 and to_char(c.dat_neu,'YYMMDD')= to_char(kalender.fbk_gre_dat,'YYMMDD'))
, b.rck_mld_art
, to_char(b.mtx_ist_end,' DD.MM.YY')
, lpad(fabrikkalender.fbk_tag,5,0)
, d.text
FROM auaupo a
, aubapo b
, svsv04 c
, buss.dlz_text d
, svsv02 fabrikkalender
--, svsv02 kalender
where a.arb_ord_ap = 'P'
and b.kap_nr1 = '63'
and b.da_org_kap_nr3 = '0408'
and b.rck_mld_art = 'F'
and c.rck_mld_art in ('I','S','V','R')
and a.arb_ord_ap = b.arb_ord_ap
and a.arb_ord_bcd = b.arb_ord_bcd
and a.arb_ord_ap = c.arb_ord_ap
and a.arb_ord_bcd = c.arb_ord_bcd
and b.da_org_kap_nr3 = c.kap_ist_nr3
and b.da_org_kap_nr4 = c.kap_ist_nr4
and b.da_org_kap_nr3 = d.kst
and b.da_org_kap_nr4 = d.apl
and fabrikkalender.kal_id = 1
and to_char(b.mtx_ist_end,'YYMMDD')=
to_char(fabrikkalender.fbk_gre_dat,'YYMMDD')
and (fabrikkalender.fbk_gre_dat BETWEEN TO_DATE('&1','DD.MM.YYYY')
AND TO_DATE('&2','DD.MM.YYYY'))
--and kalender.kal_id = 1 and to_char(c.dat_neu,'YYMMDD')= to_char(kalender.fbk_gre_dat,'YYMMDD')
group by
a.arb_ord_bcd
, a.arb_ord_nr
, a.arb_ord_aufl
, a.arb_ord_zae
, a.auf_mz
, a.sap_lag_ort
, a.sap_lei_zen
, b.da_org_kap_nr3||b.da_org_kap_nr4
, b.rck_mld_art
, a.da_ext_prio
, b.mtx_ist_end
, lpad(fabrikkalender.fbk_tag,5,0)
, d.text;
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben