Ich habe einige Daten in einer Tabelle, die in etwa so aussieht:Iterative Abfrage ohne CTE mit
Item Date Price A 8/29/2012 $3 B 8/29/2012 $23 C 8/29/2012 $10 A 8/30/2012 $4 B 8/30/2012 $25 C 8/30/2012 $11 A 8/31/2012 $3 B 8/31/2012 $22 C 8/31/2012 $8 A 9/01/2012 $3 B 9/01/2012 $26 C 9/01/2012 $9 A 9/02/2012 $3 B 9/02/2012 $24 C 9/02/2012 $9
Ich brauche eine Abfrage zu schreiben, die für einen Preis identifiziert hat nicht geändert Seit dem 30.08.2012 hat sich der Preis für Artikel C seit dem 01.09.2012 nicht geändert, und gibt die Anzahl der Tage zurück, die für beide Tage verstrichen sind (wir suchen Artikel mit nicht beweglichen Preisen). Ich kann CTE oder Cursor oder separat erstellte temporäre Tabellen (wählen Sie in, etc) wegen der Einschränkungen des Web-Bericht Werkzeug dieses sql muss nicht ausführen. Ich kann nur eine "einfache" Single-Pass-Select verwenden Abfrage (Unterabfragen werden jedoch funktionieren). Hat jemand irgendwelche schlauen Ideen, wie man dies erreicht? ?
Mein erster Versuch war zu einer Gruppe von Artikeln und Preis, wo der Preis ist die gleiche wie der neueste Preis, having count > 2
, den min Zeitpunkt zu identifizieren und eine datediff zwischen min Datum und getdate tun. Allerdings identifiziert dies nur die erste Instanz von dieser Preis, es berücksichtigt keine nachfolgenden Zeilen, die möglicherweise einen anderen Preis haben. Hoffnung, die Sinn macht.
welche DBMS verwenden Sie? PostgreSQL? Orakel? DB2? –
Btw: Sie können immer eine Ansicht schreiben, die die benötigten Informationen zurückgibt und dann eine SELECT aus dieser Sicht aus Ihrem Reporting-Tool –
Sorry, sollte gesagt haben, das ist SQL Server 2008. Leider kann ich auch keine Ansicht schreiben - Dies ist eine vom Anbieter gehostete Datenbank und wir haben nur Leseberechtigungen dafür! – Luke