MySQL:按子串搜索

MySQL: Search by substrings

我有一个数据库 table,如下所示:

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

但日期范围不起作用。

有什么想法吗?

非常感谢!

请试一试:

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 不能在同一 select 语句的 where 子句中引用。

  • Date(timestamp) returns 日期部分

  • DATE_SUB(CURDATE(),INTERVAL 1 WEEK) returns 一天都一样 date

  • DATE_SUB(NOW(),INTERVAL 1 WEEK) returns 每一秒都不同 timestamp

这是由于 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) 来转换为日期格式。

如果kWh_Dag可以下降(即,是否可以收集负能量?)那么您应该获取每天的最后一条记录,然后获取该记录的能量。

使用子查询获取每天最新记录的日期/时间,然后将其加入 table 以获取该记录的详细信息:-

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