[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Nov 2009
    Beiträge
    222
    Zu deinem (angepassten) Beispiel:

    1, 1, 1, 2016, 04, 25, 77
    1, 1, 1, 2017, 03, 15, 67
    1, 1, 1, 2018, 02, 18, 78
    1, 1, 1, 2019, 01, 30, 11

    Bekommst du die Gruppe mit
    1, 1, 1, 2016, 01, 15, 11
    Das glaube ich nicht. Du hast sicher übersehen das in der b selektion
    auch das drin ist:
    where (ff1, ff2, ff3,
    fjj*10000+fmm*100+ftt) in(
    select ff1, ff2, ff3, mi from a)

    mi ist das min(FJJ*10000+FMM*100+FTT) aus der a selektion

    Dadurch habe ich in a nur noch 1, 1, 1, 2016, 04, 25, 77
    und ermittel in b nun die 77

    (es könnte ja einen 1, 1, 1, 2016, 04, 25, 13 Satz geben, dann würde ich hier die 13 ermitteln)

    Oder nicht??

    where (feld1, feld2) in(select ...) ist langsamer als
    where exists(select * from file where Feld1 = feld1 and feld2 = feld2)??



    Danke
    DiBe

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Zu letzter Frage:
    Ja, da der "In" alle Daten durchsuchen muss, da auch der letzte Datensatz die Bedingung erfüllen könnte.
    Vor allem dann, wenn er nicht zusätzlich durch einen indizierten Where eingeschränkt wird.
    Gibt es aber einen Schlüssel für die Where-Klausel des "[not] exists" ist das genau 1 Zugriff.

    Den exists gibts halt noch nicht so lange wie den in, so ca. erst 20 Jahre;-).

    with a as (
    select FF1, ff2, ff3,
    min(fjj*10000+fmm*100+ftt) as mi
    from datei1
    where
    (ff1, ff2, ff3) in(
    select f1, f2, f3
    from datei2
    where hdkz
    = 10 )
    group by f1, f2, f3),

    b as (select ff1, ff2, ff3,
    min(fjj), min(fmm), min(ftt), min(fnr) as fnr
    from datei1 where
    (ff1, ff2, ff3,
    fjj*10000+fmm*100+ftt) in(
    select ff1, ff2, ff3, mi from a)
    group by ff1, ff2, ff3)
    select * from b

    Deine Einschränkungen der Where-Klauseln ändern daran nun auch nichts.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Nov 2009
    Beiträge
    222
    Danke,
    du meinst, das der select min(
    ERST den absoluten MIN Wert ermittelt und dann nachsieht ob die Bedingung erfüllt ist?
    Und wenn nicht den Satz dann verwirft?

    m.e. muß er doch erst die Sätze auswählen die der Bedingung entsprechen und aus dieser Teilmenge das Ergebnis bilden!

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    So arbeitet SQL nicht.
    SQL erstellt keine temporären Zwischenergebnisse, sondern je Zeile werden alle Verbindungen und Berechnungen durchgeführt.

    D.h., die Whereklausel für den Subselect auf a wird vor der Gruppierung und der Berechnung von Aggregaten durchgeführt:

    1. Select inkl. aller Joins
    2. Where-Klausel je Zeile aus 1.
    3. Group By mit Aggregatbildung
    4. Having Klausel (where auf Gruppenergebnsse)

    Da du ja wahrscheinlich mehr Daten hast, als dein Beispiel oben aufzeigt, kann es trotz der Where-Klausel auf a zu mehreren Zeilen der Gruppe FF1-FF3 kommen.

    Daher solltest du

    min(fjj), min(fmm), min(ftt), min(fnr) as fnr

    durch

    min(fjj*10000+fmm*100+ftt) as mi

    ersetzen.
    Un die FNR dann zu erhalten kannst du den Extrakt via mod(mi, 100) erhalten.

    Select b.*, mod(mi, 100) fnr
    from b
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQL ersten Satz einer Gruppe holen
    By Starocotes in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 26-08-20, 15:46
  2. SQL Update - Nur den ersten Satz ändern
    By svente in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 22-08-18, 16:34
  3. SQL - Mehrere Sätze in einen Satz mit mehreren Spalten
    By wti in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 11-09-15, 12:47
  4. Sfl-Satz löschen, declare global temporary table im SQL
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 08-01-15, 14:19
  5. SQL Update Satz in Abhänigkeit vom Folgesatz
    By malzusrex in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 20-11-14, 14:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •