2017-06-01 4 views
1

Ich habe eine MySql Tabelle:Sql Gruppe von Datetime

+--------------------+----------------+ 
| datetime   | energy   | 
+--------------------+----------------+ 
| 2010-06-15 10:00:00|    1| 
| 2010-06-15 10:15:00|    3| 
| 2010-06-15 10:30:00|    6| 
| 2010-06-15 10:45:00|    7| 
| 2010-06-15 11:00:00|    9| 
| 2010-06-15 11:15:00|    12| 
| 2010-06-15 11:30:00|    15| 
| 2010-06-15 11:45:00|    28| 
| 2010-06-15 12:00:00|    52| 
| 2010-06-15 12:15:00|    75| 
| 2010-06-15 12:30:00|    88| 
| 2010-06-15 12:45:00|    102| 
| 2010-06-15 13:00:00|    150| 
| 2010-06-15 13:15:00|    189| 
| 2010-06-15 13:30:00|    200| 
| 2010-06-15 13:45:00|    205| 
| 2010-06-15 14:00:00|    209| 
| 2010-06-15 14:15:00|    400| 
| 2010-06-15 14:30:00|    450| 
| 2010-06-15 14:45:00|    480| 
| 2010-06-15 15:00:00|    500| 
+--------------------+----------------+ 

ich die Produktion von jeder Stunde als Differenz zwischen Maximal- und Minimal jeder Stunde erhalten würde:

Beispiel:

Produktion von Stunde 10 ist gegeben durch prod. von Stunde 11 (Wert = 9) weniger Produktion von Stunde 10 (Wert = 1) -> Ergebnis = 8

Erwartetes Ergebnis

+--------------+----------------+ 
| datetime  | energy   | 
+--------------+----------------+ 
| 2010-06-15 10|    8| 
| 2010-06-15 11|    43| 
| 2010-06-15 12|    98| 
| 2010-06-15 13|    69| 
| 2010-06-15 14|    291| 
+--------------+----------------+ 

select max(energy) - min(energy) 
FROM tableA 
group by hour(datetime) 

diese Abfrage nicht, weil nicht funktioniert, den Unterschied zwischen 10 machen : 45 und 10:00 (nicht 11:00 und 10:00)

Irgendwelche Tipps?

+0

Haben Sie das wollen Unterschied zwischen dem Max und Min oder zwischen dem Beginn einer Stunde und dem Beginn der nächsten Stunde? – Barmar

+0

Steigt die Energie immer, also sind sie das Gleiche? – Barmar

+0

Ich möchte den Unterschied zwischen Max und Min, auch wenn die Energie immer steigt, weil manchmal Proben fehlen können. –

Antwort

0

Um den Unterschied zwischen jeder Stunde zu erhalten, verwenden Sie einen Self-Join, der sich auf Zeiten bezieht, die eine Stunde auseinander liegen.

SELECT a.datetime, b.energy - a.energy AS energy 
FROM tableA AS a 
JOIN TableA AS b ON a.datetime = DATE_SUB(b.datetime, INTERVAL 1 HOUR) 
WHERE MINUTE(a.datetime) = 0 

DEMO

+0

Ich brauche den Unterschied zwischen Max und Min, auch wenn die Energie immer steigt, weil manchmal Proben fehlen können Ich bin nicht sicher, jede XX: 00 Minute –

+0

Aber wenn Sie das Maximum in Stunde 10 wollen, warum würde es verwenden die Energie von 11:00? Das ist nicht zur selben Stunde. – Barmar

+0

Was ist, wenn 10:45 höher als 11:00 ist, solltest du das als Maximum benutzen? – Barmar

0

BEISPIEL MIT DATA FEHLT

+ -------------------- + -------- -------- + | datetime | Energie | + -------------------- + ---------------- + | 2010-06-15 10: 00: 00 | 1 | | 2010-06-15 10: 45: 00 | 7 | | 2010-06-15 11: 00: 00 | 9 | | 2010-06-15 11: 15: 00 | 12 | | 2010-06-15 11: 30: 00 | 15 | | 2010-06-15 11: 45: 00 | 28 | | 2010-06-15 12: 15: 00 | 75 | | 2010-06-15 12: 30: 00 | 88 | | 2010-06-15 12: 45: 00 | 102 | | 2010-06-15 13: 00: 00 | 150 | | 2010-06-15 13: 15: 00 | 189 | | 2010-06-15 13: 30: 00 | 200 | | 2010-06-15 13: 45: 00 | 205 | | 2010-06-15 14: 00: 00 | 209 | | 2010-06-15 14: 15: 00 | 400 | | 2010-06-15 14: 30: 00 | 450 | | 2010-06-15 14: 45: 00 | 480 | | 2010-06-15 15: 00: 00 | 500 | + -------------------- + ---------------- +

In diesem Beispiel sind einige Beispiele fehlt.

Erwartetes Ergebnis:

+ -------------- + ---------------- + | datetime | Energie | + -------------- + ---------------- + | 2010-06-15 10 | 8 | 11:00 bis 10:00 | 2010-06-15 11 | 17 | 11:45 bis 11:00 | 2010-06-15 12 | 150 | 13:00 bis 12:15 | 2010-06-15 13 | 69 | 13:00 bis 14:00 | 2010-06-15 14 | 291 | 14:00 bis 15:00 + -------------- + ---------------- +

Ich möchte immer gruppieren durch eine komplette Stunde: von 10.00 bis 11.00 Uhr inklusive von 11.00 bis 00.00 Uhr inklusive von 12.00 bis 13.00 Uhr inklusive ecc .... immagine