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
我有一个数据库 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