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
Benutzerbild von himitsu
himitsu

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

AW: SQL-Statement zu aufwendig

  Alt 27. Mai 2014, 21:48
Wobei dein Code doch auch nur geht, wenn es für jeden Artikel (watenr+tebez1) maximal je einen Eintrag pro Zeitraum gibt. (und das sollten die ursprünglichen Joins auch hinbekommen, wenn vielleicht auch etwas langsamer).

Wobei bei den Joins alle Zeiträume in je einem Artikeldatensatz zusammen sein müssen, da sie sonst doppelt/mehrfach eingerecht werden.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
223 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: SQL-Statement zu aufwendig

  Alt 28. Mai 2014, 06:34
Die Ergebniss ist wahrscheinlich falsch weil da nur auf Monat verglichen wird , d.h. es wir Mai 2014+Mai2013 +Mai2012 usw aufaddiert
da muss noch ein Vergleich auf Jahr hinein

Zur Geschwindigkeit, das extract kann keinen Index verwenden es führt immer zu einem Full Table Scan
schneller wird wenn man die Bedingungen mit

2014-05-01<=Liefertermin<=2014-05-31

eingrenzt dann kann ein Index auf Liefertermin verwendet werden und das Ergebniss stimmt auch

mfg Hannes
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: SQL-Statement zu aufwendig

  Alt 28. Mai 2014, 07:04
Die Ergebnisse sind wahrscheinlich falsch
Korrekt. Mein erster Ansatz war mit 'between' und dem vorherigen Ausrechnen der Monatsgrenzen, also so:

SQL-Code:
  ...
  SUM(IIF (ltlite between @firstOfMonth and @lastOfMonth, ltRest,0)) as 'Bedarf Monat'
  ...
Aber ich dachte, wenn er seine Monate haben will, soll er doch. Die Eingrenzung des Lieferdatums funktioniert wegen der Spalte 'Rückstände' nicht, denn man weiß nicht, wann der älteste Rückstand ist.

Bei einer Aggregierung über die Tabelle ist ein Scan zwingend. Bei sehr großen Tabellen könnte ein Index auf den Aggregatspalten etwas bringen, aber das dürfte auf das RDBMS ankommen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: SQL-Statement zu aufwendig

  Alt 28. Mai 2014, 07:08
In solchen Fällen kann es auch helfen, wenn man mit temporären Tabellen arbeitet.

Die zu untersuchende Datenmenge wird mit einem einfachen SELECT in eine auf die Suche passendes Format gebracht (z.B. der Monat) und eingeschränkt. Dann werden dort passende Indizes für die Suche (Spalte Monat) erstellt und mit dieser reduzierten Datenmenge wird dann die konkrete Abfrage durchgeführt.

BTW:

Trotz allem können solche Abfragen je nach Datenvolumen eine gewisse Zeit in Anspruch nehmen. Dann lässt man diese nicht synchron am Client laufen, sondern asynchron auf dem Server (eigene Anwendung).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: SQL-Statement zu aufwendig

  Alt 28. Mai 2014, 07:40
In solchen Fällen kann es auch helfen, wenn man mit temporären Tabellen arbeitet.
Ja, aber imho nicht bei diesem Problem.
Zitat:
...Dann lässt man diese nicht synchron am Client laufen, sondern asynchron auf dem Server (eigene Anwendung).
Yo, aber nur, wenn man das 1x pro Monat macht, imho. Ansonsten würde ich Redundanz schaffen, aka DWH: Im Kleinstformat reicht hier eine Tabelle 'Bestellbestand' mit den Spalten der gewünschten Ausgabe und täglicher Pflege über einen Mitternachtslauf oder real-time über Trigger. Hier würde ich jedoch sogar eine Historie anlegen, mit den Spalten 'Datum, Artikel, Zeitraum, Bestand'. 'Datum' ist das heutige Datum, 'Zeitraum' ist 'Rückstand' bzw. Monat+Jahr und 'Bestand' eben der Bestand des Zeitraums. Diese Tabelle wächst täglich. Mit ihr kann ich mir eine Historie der Bestellübersichten anschauen und z.B. einschreiten, wenn sich 'Rückstände' tendenziell erhöhen oder zukünftige Bestellbestände abnehmen...

Die o.g. Auswertung erhalte ich dann über einen PIVOT
  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 05:53 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