[Java] [SQL] Variable initialisieren

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von die_kackwurst, 28. Juni 2010 .

  1. 28. Juni 2010
    [SQL] Variable initialisieren

    Moin!

    Ich habe ein großes Problem.
    Bei meiner SQL-Abfrage die ich in Java ausführe habe ich das Problem das sie beim ersten Mal nicht funktioniert und als Ergbnis andauernd "null" liefert.

    Nach dem 2. Ausführen sind die richtigen Ergebnisse da. Scheinbar liegt das an der Variablendeklaration oder so...

    Hier mal der Code:

    Code:
    SELECT
     id,
     name,
     status,
     DATE_FORMAT(enddate, '%Y-%m-%d %T') as enddate
    FROM
     (
     SELECT
     id,
     status,
     enddate,
     name
     FROM
     (
     SELECT
     id, 
     name,
     status,
     @enddate := IF(@lastid = id, @tempdate, datum) AS enddate,
     @tempdate := datum,
     @lastid := id,
     @lastname := name
     FROM
     (SELECT @lastid:='', @lastname = '', @enddate = '', @tempdate = (Select datumFrom (Select * FROM test order by ID asc, datum desc limit 2) roh Order by id asc, datum asc limit 1)) AS vars,
     (SELECT * FROM test ORDER BY id asc, datum desc) AS daten
     ) AS daten
     ) AS daten
    WHERE status NOT LIKE 'TEST'
    AND owner LIKE 'TEST%'
    Order by id ASC
    Dabei geht es darum das eine Tabelle durchgegangen wird und das aktuelle Element als Endzeit die Startzeit vom nächsten Element bekommt (deshalb absteigend sortiert)... Beim 2. Mal funktioniert es wie gesagt einwandfrei

    Bitte helft mir
     
  2. 28. Juni 2010
    AW: [SQL] Variable initialisieren

    was ist da dran java, bzw. wie kreierst du die abfrage in java? mach mal einfach anstelle des ausführens an dieser stelle einen output der abfrage, genau so wie sie ausgeführt würde, und führ die dann mal in nem gui tool (bsp Mysql query browser) aus und schau ob und wos n fehler gibt.

    mfg
     
  3. 28. Juni 2010
    AW: [SQL] Variable initialisieren

    naja ich benutze TOS (Talend Open Studio) und da ist es mit selber programmieren zum Teil nicht so leicht... Das Problem ist ja hauptsächlich das das teil beim ersten Mal ausführen nicht richtig läuft.. Es kommen halt die falschen Werte bei raus. Beim 2. Mal ausführen klappt es einwandfrei - das kann ich dem Java-Programm aber nicht sagen das er es 2 mal ausführen soll -.-
     
  4. 29. Juni 2010
    AW: [SQL] Variable initialisieren

    bist du sicher das deine select abfrage nicht einfacher geht?
    vielleicht lässt sich auch so dein fehler ausmerzen.
     
  5. 29. Juni 2010
    AW: [SQL] Variable initialisieren

    Naja keine ahnung. Bin nicht so der sqlheld. Also wenn ihr eine andere idee habt würde ich die gern ausprobieren. Aber die performance muss gut sein weil ich ca 500.000 datensätze hab...
     
  6. 29. Juni 2010
    AW: [SQL] Variable initialisieren

    gib mir mal bitte die tabellen struktur und ein beispiel was rauskommen soll.
    dann kann ich ja mal schauen
     
  7. 29. Juni 2010
    AW: [SQL] Variable initialisieren

    okay super...

    also stell dir das so vor:
    Ich habe eine Tabelle mit ca. 500.000 unterschiedlichen Datensätzen, welche etwa 70.000 ID's zugeordnet sind. Dabei Gibt es etwa 30 verschiedene Namen und jeweils unterschiedliche Zeiten (hier vereinfacht nur mit Datum, sonst auch richtig mit HH:mm:ss).
    Also ist die Tabellenstruktur wie folgt:

    ID | Name | Zeitpunkt
    1 | A | 1.1.
    1 | B | 2.1.
    1 | A | 2.1.
    2 | A | 1.1.
    2 | A | 3.1.
    2 | A | 4.1.
    2 | B | 4.1.
    2 | C | 5.1.
    3 | B | 2.1.
    3 | A | 2.1.
    3 | A | 2.1.
    4 | C | 3.1
    4 | C | 4.1.
    4 | C | 9.1.

    Jetzt soll die SQL-Abfrage folgendes realisieren: Gehe die Tabelle durch und nehme als Startzeit den aktuellen Zeitpunkt und als Endzeit den Startzeitpunkt vom nächsten Eintrag sofern die gleiche ID vorherscht.
    Sozusagen kommt dann folgendes heraus:

    ID | Name | Start | Ende
    1 | A | 1.1. | 2.1.
    1 | B | 2.1. | 2.1.
    1 | A | 2.1. | 2.1. (Start = Ende)
    2 | A | 1.1. | 3.1.
    2 | A | 3.1. | 4.1.
    2 | A | 4.1. | 4.1.
    2 | B | 4.1. | 5.1.
    2 | C | 5.1. | 5.1. (Start = Ende)
    3 | B | 2.1. | 2.1.
    3 | A | 2.1. | 2.1.
    3 | A | 2.1. | 2.1. (Start = Ende)
    4 | C | 3.1 | 4.1.
    4 | C | 4.1. | 9.1.
    4 | C | 9.1. | 9.1. (Start = Ende)

    Das klappt wie gesagt auch mit der oberen Abfrage, allerdings erst beim 2. Mal -.-

    Danke schonmal
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.