MS-SQL 2005-Query- optimierungsvorschläge?

Colttt

Enthusiast
Thread Starter
Mitglied seit
16.01.2006
Beiträge
2.667
Ort
Brandenburg(stadt)
hallo,

ich hoffe doch jmd von euch kann mir helfen, ich hab das dort unten ganz allein zusammen gebastelt bzw zusammen gesucht und würde gerne wissen ob es eine einfachere/kürzere möglichkeit gibt?!

ZIEL:
ich möchte die daten von vor 7tagen haben, und zwar von 0uhr-23:59uhr, ich hab den ersten query auch mit einem "=" probiert, dann liefert er leider nur das ergebnis um 0Uhr und nicht die werde danach, deswegen ein ">"
Code:
#hiermit grenze ich die tage ein, hol mir nur das datum von GETDATE und sage zwischen welcher Uhrzeit es liegen soll
AND "IWrkgrpQueueStats"."dIntervalStart" > CONVERT(VARCHAR(10),GETDATE() -7,111) AND (DATEPART(hour,"IWrkgrpQueueStats"."dIntervalStart") BETWEEN 0 AND 23)
Code:
#hier sagen ich das es vor zwischen 7 und 6tagen sein muss
AND "IWrkgrpQueueStats"."dIntervalStart" BETWEEN CONVERT(VARCHAR(10),GETDATE() -7,111) AND CONVERT(VARCHAR(10),GETDATE() -6,111)

schonmal besten dank im voraus!
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Welchen Datentyp hat die Spalte?

Meine Oralce Datenbank würde folgendes erlauben. Natürlich nur wenn die Datentypen stimmen. Getdate heißt bei Oracle zwar Sysdate aber ich will hier nicht unötig Verwirrung stiften also bleiben wir mal bei deinen Funktionsnamen.

BETWEEN GETDATE() -7 and GETDATE() -6
 
hi,

dene idee hatte ich auch zuerst, aber getdate liefert datum +uhrzeit aus!! also geht er nur 6tage zurück, bleibt aber bei der uhrzeit (12.04.10 22:28-13.04.10 22:28) und genau das will ich ja nicht, er soll ja den kompletten tag nehmen (also 12.04.10 00:00-23:59).. verstehst?
 
Wenn nichts dagegen spricht würde ich eher den Datentyp Date verwenden. Das macht die Abfragen natürlich leichter.
 
ähm das geht nicht, da ich die uhrzeit später für das reporting brauche.. zumal es vom programm vorgegeben ist..
 
Dann könntest du höchstens noch eine View basteln, die wie dein 2. SQL Statement ein wenig umkonvertiert. Für die Performance macht das zwar keinen Unterschied aber es wäre ein wenig Übersichtlich. Du könntest natürlich der View auch ein paar where Bedingungen verpassen.

Das ganze macht eigentlich nur dann Sinn, wenn das komplette SQL Statement zu unübersichtlich wird oder du die View für mehrere SQL Abfragen benötigst.

Du könntest dir auch eine eigene "getdate" funktion schreiben. Für die Performance auch wieder hoch wie breit aber wird ebenfalls etwas übersichtlicher.

Ansonsten wirst du wohl bei deinem 2. SQL Statement bleiben müssen. Das 1. SQL Statement ist eigentlich unötig bzw fehlerhaft.
 
hi,

ich/wir haben das jetzt wie folgt gelöst, jedoch ist das ganze grotten langsam und braucht ewig und die CPU-last steigt auch enorm.. evtl ne idee wie ich das ganze noch performanter machen kann??

besten dank schon mal im voraus!
Code:
AND 	IAgentQueueStats.[dIntervalStart] BETWEEN CONVERT(datetime,(CONVERT(VARCHAR(10),GETDATE() -1,121) + ' 00:00:00:000'), 121) 
 AND CONVERT(datetime,(CONVERT(VARCHAR(10),GETDATE() -1,121) + ' 23:59:59:000'), 121)
 
Das wären aber die Daten von Gestern und nicht von vor 7 Tagen.
Oben war die Rede von kürzer bzw einfacher. Jetzt sind es Performanceprobleme. Wäre schön wenn du das beim nächsten mal etwas eindeutiger schreiben könntest. Dann könnte wir uns eine menge sparen.

Schreib dir einen anonymen Block (Stored Procedure nur ohne Procedurenamen) und speicher dir in einer Variable den Wert von Getdate() inklusive Konvertierung usw ab. Dann sollte das (hoffentlich) erheblich schneller werden. Für die Umsetzung in MS-SQL bist du zuständig :)
 
gestern, vor 7tagen.. egal.. es geht ja ums prinzip und wenn ich gestern kann, dann kann ich auch vor 7tagen ;)

und da ich das schon gelöst habe(vor xytagen), hab ich jetzt damit performanceprobleme.. ;)

mit dem anderen, versuch ich mal morgen hinzubekommen, aber schonmal danke dafür
 
hallo..

vielen dank für deine hilfe, aber das mit der prozedure etc übersteigt meinem horizont bei weitem.. zumal ich jetzt noch nen grösseres Problem habe.. jetzt muss ich herausfinden wie ich den kompletten vormonat nehme.. so getdate -xy tage geht leider nicht da Monate immer variabel sind.. aber werd schon noch was finden.

aber trotzdem danke:wink:
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh