AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Hilfe bei Erstellung eines SQL-Statements
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei Erstellung eines SQL-Statements

Ein Thema von barnti · begonnen am 2. Aug 2006 · letzter Beitrag vom 3. Aug 2006
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Hilfe bei Erstellung eines SQL-Statements

  Alt 2. Aug 2006, 15:55
Datenbank: Oracle • Zugriff über: Hibernate
Hallo Leude,

ich habe mal wieder eine Frage zur Erstellung einer DB-Abrage. Ich bin alles andere als fit beim Formulieren von SQL-Statements. Daher formuliere ich mein Anliegen einmal hier. Folgende Struktur:

[code]
Tabelle: RQS
rqsSk
EMP_SK
STATUS
EFF_CRE_TS

Tabelle: RQSDate
rqsSk
rqsDateSk
NOM_DATE
EMP_SK
STATUS_NOM

Tablle: RQSDet
rqsDetSk
rqsDateSk
ACTN
SEG_CODE_SK
[code]


Die Tabellen stehen wie folgt in Beziehung:
[code]
rqs <= 1:n => rqsDate <= 1:1 => rqsDet
[code]

Ich habe bisher folgendes:

SQL-Code:
select
        rqs.RQS_SK,
        rqs.RQS.EMP_SK,
        rqs.STATUS,
        rqs.EFF_CRE_TS,
        rqsDate.NOM_DATE,
        rqsDet.ACTN,
        rqsDet.SEG_CODE_SK,
        count(EFF_CRE_TS)


from
   Rqs rqs inner join fetch rqs.rqsDates rqsdates
   inner join fetch rqsdates.rqsDets rqsdets
where
   (rqs.empSk = '-979999242803'
and
   rqsdets.actn = 'ADD'
and
   rqsdets.segCodeSk ='-979998246801')
order by
   rqs.effCreTs desc
Das Ergebnis liefert mehrere Zeilen, wo rqs.EFF_CRE_TS jeweils identich sind:
Code:
RQS_SK            EMP_SK           STATUS      EFF_CRE_TS          NOM_DATE  ACTN   SEG_CODE_SK   Tage
-979913683924   -979999242803   FAIL      01.08.2006 14:41:14   38959      ADD   -979998246801   1
-979913684171   -979999242803   FAIL      01.08.2006 14:36:40   38959      ADD   -979998246801   1
-979913685879   -979999242803   FAIL      01.08.2006 13:29:35   38959      ADD   -979998246801   1
-979913685879   -979999242803   FAIL      01.08.2006 13:29:35   38960      ADD   -979998246801   1
-979913685879   -979999242803   FAIL      01.08.2006 13:29:35   38961      ADD   -979998246801   1
-979913685879   -979999242803   FAIL      01.08.2006 13:29:35   38962      ADD   -979998246801   1
-979913685879   -979999242803   FAIL      01.08.2006 13:29:35   38963      ADD   -979998246801   1
-979913685879   -979999242803   FAIL      01.08.2006 13:29:35   38964      ADD   -979998246801   1
-979913685879   -979999242803   FAIL      01.08.2006 13:29:35   38965      ADD   -979998246801   1
-979913685879   -979999242803   FAIL      01.08.2006 13:29:35   38966      ADD   -979998246801   1
-979913685879   -979999242803   FAIL      01.08.2006 13:29:35   38967      ADD   -979998246801   1
-979913714646   -979999242803   FAIL      31.07.2006 11:47:51   38958      ADD   -979998246801   1
Ich möchte nun statt mehrfachen Zeilen EFF_CRE_TS die Zeilen zählen und als Tage ausgeben. Als Beispiel:
Für EFF_Cre_TS = 01.08.2006 13:29:35 sollte bei Tagen ein 9 erscheinen. Das kann doch nicht so schwer sein? Wie muss das gruppiert werden? Wie sieht das "count()" aus?

Ich stecke fest! Kann mir jemand helfen? Vielen Dank!
Gruß,

Barnti
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Hilfe bei Erstellung eines SQL-Statements

  Alt 2. Aug 2006, 17:20
Hallo,

Zitat von barnti:
Das Ergebnis liefert mehrere Zeilen, wo rqs.EFF_CRE_TS jeweils identich sind
mitnichten.

Selbst, wenn du nur über EFF_CRE_TS gruppiert hättest, wären die einzelnen Zeilen erschienen, da die Timestamp-Werte unsichtbare Millisekunden-Anteile enthalten. Es gibt sicher DB-Funktionen mit denen du auf Sekunden-Werte runden kannst.

In deinem gezeigten SQL-Statement fehlt die GROUP BY-Klausel und die Feldnamen sind stellenweise nicht korrekt geschrieben worden.

Was willst du eigentlich erreichen? Sollen die Anzahl der Einträge zu einer bestimmten Sekunde gezählt werden oder zu einem bestimmten Tagesdatum?

Grüße vom marabu
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Hilfe bei Erstellung eines SQL-Statements

  Alt 3. Aug 2006, 08:35
Hallo marabu
Zitat von marabu:
Selbst, wenn du nur über EFF_CRE_TS gruppiert hättest, wären die einzelnen Zeilen erschienen, da die Timestamp-Werte unsichtbare Millisekunden-Anteile enthalten. Es gibt sicher DB-Funktionen mit denen du auf Sekunden-Werte runden kannst.

In deinem gezeigten SQL-Statement fehlt die GROUP BY-Klausel und die Feldnamen sind stellenweise nicht korrekt geschrieben worden.

Was willst du eigentlich erreichen? Sollen die Anzahl der Einträge zu einer bestimmten Sekunde gezählt werden oder zu einem bestimmten Tagesdatum?

Grüße vom marabu
Ersteinmal Danke! Ich weiß, das statement ist so noch nicht zu gebrauchen. Deshalb wende ich mich ja auch an dieses Forum.

Was ich erreichen möchte, ist das ich die Ausgabe erhalte, die ich oben dargestellt habe + die letzte Spalte, wo dann die Anzahl gruppierter Tage angezeigt werden. Also statt:

Code:
RQS_SK EMP_SK STATUS EFF_CRE_TS NOM_DATE ACTN SEG_CODE_SK Tage
-979913683924 -979999242803 FAIL 01.08.2006 14:41:14 38959 ADD -979998246801 1
-979913684171 -979999242803 FAIL 01.08.2006 14:36:40 38959 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38959 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38960 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38961 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38962 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38963 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38964 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38965 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38966 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38967 ADD -979998246801 1
möchte ich:
Code:
RQS_SK EMP_SK STATUS EFF_CRE_TS NOM_DATE ACTN SEG_CODE_SK Tage
-979913683924 -979999242803 FAIL 01.08.2006 14:41:14 38959 ADD -979998246801 1
-979913684171 -979999242803 FAIL 01.08.2006 14:36:40 38959 ADD -979998246801 1
-979913685879 -979999242803 FAIL 01.08.2006 13:29:35 38959 ADD -979998246801 9
Eine Gruppierung nach dem Datum(Java Date), an dem der Eintrag erstellt wurde, so dass ich in der Spalte "Tage" die Anzahl zu einem Vorgang eingetragener Zeilen habe(hier: in Zeile drei steht es wurden 9 Zeilen zu einem Vorgang eingefügt). Der Wert "EFF_CRE_TS" ist von mir in der Applikation erzeugt und an die DB übergeben worden. Der Eintrag muss also identisch sein. "TS" ist hier etwas verwirrend, da es kein Timestamp ist.
Um nun alle Einträge eines Vorgangs bekommen muss ich nach EMP_SK (User_ID) und anschließend EFF_CRE_TS gruppieren (oder zuerst nach dem Datum?), ist das dann richtig? Ich verstehe nicht warum das nicht klappt...

Ich hoffe, dass macht es klarer? Ist das möglich? Wie kann ich diese Ausgabe erreichen?
Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Hilfe bei Erstellung eines SQL-Statements

  Alt 3. Aug 2006, 10:05
Hallo noch ein Mal,

ich habe es zum Teil hinbekommen:
Code:
SELECT
    RQS.RQS_SK,
    RQS.EMP_SK,
    RQS.EFF_CRE_TS,
    RQS.STATUS,
    //RQS_DATE.NOM_DATE,
    RQS_DET.ACTN,
    RQS_DET.SEG_CODE_SK,

    count(*)  

FROM
    (RQS INNER JOIN RQS_DATE ON RQS.RQS_SK = RQS_DATE.RQS_SK)
    INNER JOIN RQS_DET ON RQS_DATE.RQS_DATE_SK = RQS_DET.RQS_DATE_SK

WHERE
    (((RQS.EMP_SK)= '-979999242803')
AND
    ((RQS_DET.ACTN)='ADD')
AND
    ((RQS_DET.SEG_CODE_SK)=-979998246801))

GROUP BY
    RQS.RQS_SK,
    RQS.EFF_CRE_TS,
    RQS.STATUS,
    RQS.EMP_SK,
    //RQS_DATE.NOM_DATE
    RQS_DET.ACTN,
    RQS_DET.SEG_CODE_SK
ORDER BY
    RQS.EFF_CRE_TS DESC
Was jetzt noch fehlt ist der auskommentierte Teil. Mir ist klar, dass sich das so nicht einbinden lässt, da es sich um eine Gruppierung handelt. Was ich bräuchte ist die erste Zeile RQS_DATE mit dem kleinsten Wert RQS_DATE.NOM_DATE.
Gibt es eine Möglichkeit, dieses in die Abfrage mitaufzunehmen?
Gruß,

Barnti
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Hilfe bei Erstellung eines SQL-Statements

  Alt 3. Aug 2006, 10:21
Reicht da nicht schon die MIN() Funktion - nur in der Projektion, nicht in der GROUP-Klausel.

marabu
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Hilfe bei Erstellung eines SQL-Statements

  Alt 3. Aug 2006, 10:58
Hi marabu,
Zitat von marabu:
Reicht da nicht schon die MIN() Funktion - nur in der Projektion, nicht in der GROUP-Klausel.
Sorry, das versteh ich nicht. Könntest Du Dich ein wenig ausführlicher erklären? Danke.
Gruß,

Barnti
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Hilfe bei Erstellung eines SQL-Statements

  Alt 3. Aug 2006, 12:09
So war es gemeint:

SQL-Code:
SELECT
    RQS.RQS_SK,
    RQS.EMP_SK,
    RQS.EFF_CRE_TS,
    RQS.STATUS,
    MIN( RQS_DATE.NOM_DATE ), //
    RQS_DET.ACTN,
    RQS_DET.SEG_CODE_SK,
    count(*)
...
marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz