2016-10-03 1 views
0

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

Datum_Dag   | kWh_Dag 
----------------------------- 
2016-10-03 08:35:00 | 0.005 
2016-10-03 08:30:00 | 0.004 

2016-10-02 19:15:00 | 19.019 
2016-10-02 19:10:00 | 19.019 
2016-10-02 19:05:00 | 19.015 
2016-10-02 19:00:00 | 19.011 
2016-10-02 18:55:00 | 19.004 

Как вы можете видеть, последняя запись на каждый день содержит сумму энергии, собранную в тот же день. Я хотел бы получить эти ежедневные значения в течение нескольких дней (например, на прошлой неделе). Поскольку дата содержит также время, я борюсь с правильным запросом запроса.

Строка «Datum_Dag» имеет тип «datetime».

Я пробовал:

SELECT 
    Datum_Dag, 
    SUBSTRING(
     `Datum_Dag`, 
     1, 
     10 
    ) AS this_will_be_grouped, 
    MAX(kWh_Dag) 
FROM 
    `tgeg_dag` 
WHERE 
    this_will_be_grouped > DATE_SUB(NOW(),INTERVAL 1 WEEK) 
GROUP BY 
    this_will_be_grouped 

но диапазон дат не работает.

Любая идея?

Спасибо тонну!

+0

Просто дайте это попробовать '... WHERE this_will_be_grouped> DATE_SUB (CURDATE(), INTERVAL 1 WEEK) ...' – 1000111

ответ

1

Пожалуйста, дайте это попробовать:

SELECT 
    DATE(Datum_Dag) AS this_will_be_grouped, 
    MAX(kWh_Dag) 
FROM 
    `tgeg_dag` 
WHERE 
    Datum_Dag > DATE_SUB(CURDATE(),INTERVAL 1 WEEK) 
GROUP BY 
    this_will_be_grouped 

Примечание:

  • Alias не может быть передан в ИНЕКЕ того же оператора выбора.

  • Date(timestamp) возвращает часть даты

  • DATE_SUB(CURDATE(),INTERVAL 1 WEEK) возвращает тот же date в течение дня.

  • DATE_SUB(NOW(),INTERVAL 1 WEEK) возвращает разные timestamp каждую секунду.

0

Должно к Where.

вы должны использовать

where SUBSTRING(`Datum_Dag`,1,10) > DATE_SUB(NOW(),INTERVAL 1 WEEK) 
or 
Where Datum_Dag > DATE_SUB(NOW(),INTERVAL 1 WEEK) 

и вместо того, чтобы использовать SUBSTRING, то лучше использовать cast(Datum_Dag as date) для преобразования в формат даты.

0

Если kWh_Dag может когда-либо опускаться (т. Е. Может быть отрицательная сбор энергии?), Тогда вы должны получить последнюю запись каждого дня, а затем получить энергию для этой записи.

Используя вспомогательный запрос, чтобы получить дату/время последней записи на каждый день, а затем присоединение, что спина к столу, чтобы получить подробную информацию для этой записи: -

SELECT b.Datum_Dag, 
    a.the_day, 
    b.kWh_Dag 
FROM 
(
    SELECT DATE(Datum_Dag) AS the_day, MAX(Datum_Dag) AS max_date_time 
    FROM `tgeg_dag` 
    WHERE Datum_Dag > DATE_SUB(NOW(),INTERVAL 1 WEEK) 
    GROUP BY the_day 
) sub0 
INNER JOIN `tgeg_dag` b 
ON sub0.max_date_time = b.Datum_Dag