2009-04-08 9 views
3
SELECT  totalAmount 
FROM  tbl 
BETWEEN  'date1' AND 'date2' 

GROUP BY DATE(date created) 
ORDER BY DATE(date created) 

Das gibt mir die Gesamtmenge pro Tag, die in der Tabelle ist. Aber was ich will, ist der inkrementale Wert im Vergleich zu dem vorherigen Eintrag (nicht unbedingt am Vortag)SELECT von tbl 'value1' minus dem 'vorherigen Wert'

Die Tabelle etwas sein könnte:

totalAmount | date created 
--------------------------------- 
1000   | 1st Jan 
1001   | 2nd Jan 
1003   | 3rd Jan 
1008   | 15th Jan 

Also, wo meine Abfrage zurückkehren würde: 1000,1001, 1003,1008.

Was ich wirklich will, ist: (eine Zahl im Vergleich zu früheren Eintritt - aber nicht innerhalb der BETWEEN Datumsbereich, um meine incriments zu starten), 1,2,5

+2

Sicher können Sie eine Variable erstellen, speichern Sie sie, und verwenden Sie sie erneut für jede Zeile zurückgegeben? – Kezzer

Antwort

1

Dieses aught, es zu tun:

SELECT IFNULL((t1.totalamount - t2.totalamount),0) as diff, t1.date_created 
FROM view t1 LEFT OUTER JOIN view t2 
ON t2.date = (SELECT MAX(date) FROM view WHERE date < t1.date) 
WHERE t1.date_created BETWEEN 'date1' AND 'date2' 
ORDER BY date_created 

Wo „Ansicht“ ist diese Abfrage:

SELECT date_created, SUM(totalamount) FROM tbl GROUP BY date_created 
+0

Ich bin total verloren, ich bin sicher, du hast Recht, aber ich kann es nicht erarbeiten;) Danke für die Antwort. – ed209

+0

kein Problem :) Die Idee ist, dass Sie Ihre Tabelle mit sich selbst verbinden, um zwei Kopien der Daten zu erhalten (t1 & t2). Der Join ist so eingerichtet, dass die zweite Kopie die Zeile mit dem größten Datum enthält, das immer noch kleiner ist als das Datum der ersten Kopie (MAX (DATUM) .. WHERE Datum

+0

ja - das hilft, ich bekomme das Konzept jetzt. Werde es ausprobieren, danke. – ed209

0

Versuchen Sie folgendes:

SELECT  totalAmount 
FROM  tbl 
BETWEEN  'date1' AND 'date2' 

GROUP BY DATE(date created) 
ORDER BY totalAmount DESC, DATE(date created) 
+0

Ich glaube, Sie haben die Frage falsch verstanden – ed209

0

Sie müssen zwei identische untergeordnete Unterabfragen verbinden. Ich habe nicht eine MySQL-Datenbank diese gegen testen, aber die Form würde ähnlich sein:

select t1.TotalAmount, t1.DateCreated, 
    t1.TotalAmount - t2.TotalAmount as 'Delta' 
from 
(select rownum, TotalAmount 
from tbl 
order by DateCreated) t1 
left outer join 
(select rownum, TotalAmount 
from tbl 
order by DateCreated) t2 
on t1.rownum = t2.rownum + 1 
order by t1.rownum 
+0

Ich glaube nicht, dass mysql eine Entsprechung von "rownum" in SQL Server hat, so würde dies in seinem Fall nicht funktionieren. –

+0

SQL Server hat es nicht, es hat eine row_number() -Funktion. Ich habe es schnell gegoogelt und dachte, dass die Funktion in MySQL ist. Es kann eine Abhilfe geben: http://snippets.aktagon.com/snippets/156-MySQL-rownum-equivalent –

Verwandte Themen