AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SQL-Statement zu aufwendig

Ein Thema von Ykcim · begonnen am 27. Mai 2014 · letzter Beitrag vom 28. Mai 2014
Antwort Antwort
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#1

AW: SQL-Statement zu aufwendig

  Alt 27. Mai 2014, 17:19
Du verwendest auf einigen Spalten eine Funktion (month), um das Ergebnis mit einer weiteren Funktion zu vergleichen.
Month(currentdate) usw. sollte kein Problem sein (Kopfrechnen), sowas wie month(<spalte>) macht aber idR die (hoffentlich vorhandenen) Indices unbrauchbar.
Wenn Du das umformst nach
Code:
<spalte> between [anfang aktueller Monat] and current_date
könnte es deutlich schneller laufen.
Bevor Du nun lange bastelst, um den aktuellen Monatsanfang auszurechnen, probier es einfach mal mit festen Werten aus, vlt. "current_date - 27" (das wäre heute der 1.Mai.), ich kenne die Datumsfunktionen von mySQL leider nicht auswendig.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.385 Beiträge
 
Delphi 12 Athens
 
#2

AW: SQL-Statement zu aufwendig

  Alt 27. Mai 2014, 21:07
Mal so als Tipp: Lass' alle Aggregatfunktionen (Sum) weg und auch das GroupBy muß kurz raus.
Und jetzt schau dir mal an, was deine Joints eingentlich veranstalten.
(ich glaub nicht, daß es dem entspricht, was du willst)

Im Grunde müssen die SUM-Felder also eher SubSelects sein, würde ich mir mal so denken.

PS: Als [code=sql]...[/code] macht sich der obrige "Delphi"-Code bestimmt auch viel besser.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Mai 2014 um 21:10 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: SQL-Statement zu aufwendig

  Alt 27. Mai 2014, 21:25
Versuch es mal ganz ohne join:
SQL-Code:
select concat(watenr,' ',tebez1) as 'Artikel Bezeichnung',
   sum(iif(ltlite < current_date, ltrest,0) as Rückstand,
   sum(iif(month(ltlite) = month(current_date) ,ltrest,0) as 'Bedarf aktueller Monat',
   sum(iif(month(ltlite) = month(current_date) + 1,ltrest,0) as 'Bedarf nächster Monat',
   sum(iif(month(ltlite) = month(current_date) + 2,ltrest,0) as 'Bedarf übernächster Monat'  
from liefersituation
group by concat(watenr,' ',tebez1)
Bezüglich der Syntax musst du das ggf. anpassen. Kann kein mist-QL.
Wichtig ist, das in deinem Group By- Ausdruck alle Ausdrücke angegeben sein müssen, die nicht aggregiert werden.

Das dürfte so auch mit deiner 'Month' Klausel, da er eh nur 1x durch die Tabelle rennt.

PS: Dein 'Bedarf aktueller Monat' enthält auch den Rückstand des aktuellen Monats....
also vielleicht alternativ...
SQL-Code:
...
   sum(iif(ltlite >=current_date and month(ltlite) = month(current_date) ,ltrest,0) as 'Bedarf aktueller Monat',
...

Geändert von Dejan Vu (27. Mai 2014 um 21:32 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz