2012-02-06 3 views
1

Я хочу сделать MySQL, чтобы получать ежедневные дифференциальные значения из таблицы, который выглядит следующим образом:MySQL запрос, чтобы получить суточный дифференциал значение

Date    | VALUE 
-------------------------------- 
"2011-01-14 19:30" | 5 
"2011-01-15 13:30" | 6 
"2011-01-15 23:50" | 9 
"2011-01-16 9:30" | 10 
"2011-01-16 18:30" | 15 

Я сделал два подзапроса. Первые из них, чтобы получить последнее суточное значение, потому что я хочу, чтобы вычислить значение разности этих данных:

SELECT r.Date, r.VALUE 
    FROM table AS r 
    JOIN (
    SELECT DISTINCT max(t.Date) AS Date 
    FROM table AS t 
    WHERE t.Date < CURDATE() 
    GROUP BY DATE(t.Date) 
    ) AS x USING (Date) 

второго один сделан, чтобы получить дифференциальные значения из результата первого (я показываю она с именем «стол»):

SELECT Date, VALUE - IFNULL( 
    (SELECT MAX(VALUE) 
    FROM table 
    WHERE Date < t1.table) , 0) AS diff 
    FROM table AS t1 
    ORDER BY Date 

Сначала я пытался сохранить результат первого запроса во временную таблицу, но it's not possible to use temporary tables with the second query. Если я использую первый запрос внутри FROM второго из() с псевдонимом, жалобы сервера на псевдоним таблицы не существуют. Как можно получить что-то вроде этого:

Date    | VALUE 
--------------------------- 
"2011-01-15 00:00" | 4 
"2011-01-16 00:00" | 6 

ответ

2

Попробуйте этот запрос -

SELECT 
    t1.dt AS date, 
    t1.value - t2.value AS value 
FROM 
    (SELECT DATE(date) dt, MAX(value) value FROM table GROUP BY dt) t1 
JOIN 
    (SELECT DATE(date) dt, MAX(value) value FROM table GROUP BY dt) t2 
    ON t1.dt = t2.dt + INTERVAL 1 DAY 
+0

спасибо, это работает как шарм. –