PDA

Pogčedajte punu verziju : Pomoć prijatelja ok MIN, MAX u bazi


kickloop
02. 09. 2011., 01:08
Imam tabelu sa sledećim kolonama:

name, value, timestamp

Baza se puni svaki minut sa podacima. Treba mi query da izvučem najnižu i najvišu "value" u jednom satu.

Rešenje koje imam sada je ovaj query i cron koji svaki sat spiči MIN i MAX u dodatnu tabelu.

SELECT MIN(value), MAX(value) FROM table WHERE timestamp BETWEEN NOW() - INTERVAL 1 HOUR AND NOW();

Glup sam, ne radi mi mozak, ne znam... šta god. Ima li neki SQL ninja ovde da mi spakuje query da radi bez cron-a, tj. query koji iz cele baze izvuče sve MIN(value) i MAX(value) za svaki sat u 24 sata?

Hvala unapred

webarto
02. 09. 2011., 01:40
U 24h kao u zadnja 24h, 24h za taj dan, svaki sat za svaki dan, ili nešto četvrto?

webarto
02. 09. 2011., 01:46
SELECT FROM_UNIXTIME(timestamp, '%k') h, MIN(value), MAX(value) FROM dpt GROUP BY h;

SELECT HOUR(FROM_UNIXTIME(timestamp, '%H:%i:%s')) h, MIN(value), MAX(value) FROM dpt GROUP BY h;

amidoinitrite?

Dodaj tamo WHERE ako hoćeš za neki dan, i tako...

h MIN(value) MAX(value)
0 3 977
1 15 908
2 116 962
3 46 922
4 126 984
5 78 997
6 193 995
7 61 988
8 16 984
9 16 844
10 57 922
11 25 991
12 23 991
13 11 857
14 43 972
15 9 927
16 51 983
17 49 868
18 188 986
19 59 690
20 58 999
21 91 973
22 122 958
23 61 791

BluesRocker
02. 09. 2011., 01:54
select TIME_FORMAT(created, '%H') as `Hour`, min(value), max(value) from test3 where time_to_sec(timediff(now(),created))< 24*3600 group by `Hour`;

webarto
02. 09. 2011., 02:30
Za današnji dan (može i bilo koji drugi samo unesi datum u formatu '2011-09-02')...
SELECT HOUR(FROM_UNIXTIME(uts, '%H:%i')) h, MIN(value), MAX(value)
FROM dpt
WHERE
FROM_UNIXTIME(uts, '%Y-%m-%d') = DATE(NOW())
GROUP BY h;
Za 24h...
SELECT HOUR(FROM_UNIXTIME(uts, '%H:%i')) h, MIN(value), MAX(value)
FROM dpt
WHERE
UNIX_TIMESTAMP() - 24 * 3600 < uts
GROUP BY h

kickloop
02. 09. 2011., 02:49
Rešeno. Hvala.