2014-01-14 4 views
2

Я пишу код Python, где мне нужно использовать MySQLdb для извлечения данных из базы данных MySQL. Часть исходной базы данных выглядит следующим образом:Группа MySQL от TimeStamp

Я использовал эту команду

SELECT TimeStamp,Pac 
FROM SolarData 
WHERE DATE(`TimeStamp`) = CURDATE() 
GROUP BY HOUR(TimeStamp); 

сгруппировать данные по часам, но результат не то, что я ожидал:

Номер Pac, показанный на каждый час, совпадает с номером первой записи каждого часа. Это не накопленный номер за весь час. Мне нужно накопление целого часа.

+2

Пожалуйста, внесите всю необходимую информацию прямо в свой вопрос. Разрыв ссылок, и мы хотим сохранить сообщения для будущих посетителей. –

+3

Вы не запрашивали каких-либо агрегитов в своем запросе, поэтому вы просто получаете значения из одной из записей. –

+0

Нам нужно, чтобы вы поставили как фактический результат, так и желаемый результат в этом вопросе. – miyasudokoro

ответ

5

Это потому, что MySQL похож на вашего алкогольного дядю, когда вы не используете GROUP BY по стандарту ANSI. Вы, вероятно, захотите:

SELECT HOUR(TimeStamp) AS Hour, 
    SUM(Pac) AS Pac 
FROM SolarData 
WHERE `TimeStamp` >= CURDATE() 
    AND `TimeStamp` < CURDATE() + INTERVAL 1 DAY 
GROUP BY HOUR(TimeStamp); 

Было бы полезно увидеть желаемый результат, который вы ищите. До тех пор указанный выше запрос - это всего лишь предположение, основанное на группе данных за час. Для дальнейшего использования используйте SQL Fiddle для публикации структуры/данных таблицы.

+0

Спасибо за ваш ответ. У меня новый результат. Как мне украсить код, чтобы на часовом формате можно было указать дату на нем так же, как и '2014-01-14 07: 00'? –

1

«Как украсить код так, что часовой формат может иметь дату на нем, а так 2014-01-14 7:00»

Все Hour принадлежат сегодня (CURDATE()), а вторая часть всегда ': 00', поэтому следующий запрос может вам помочь. Мог бы попробовать это?

SELECT CONCAT(CURDATE(), ' ', Hour, ':00'), Pac 
FROM (
    SELECT HOUR(TimeStamp) AS Hour, 
     SUM(Pac) AS Pac 
    FROM SolarData 
    WHERE DATE(`TimeStamp`) = CURDATE() 
    GROUP BY HOUR(TimeStamp) 
) x; 
+0

У меня ошибка: «ERROR 1248 (42000): каждая производная таблица должна иметь свой собственный псевдоним». –

+0

@Shurui Liu ooos. Сожалею. Я добавил «x» конец sql. Это псевдоним производной таблицы. –

+0

вызывает другую ошибку, но ошибка не имеет ничего общего с MySQL. Это происходит из моего кода Python. –