我有一个数据库表,如下所示:
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 :(得分: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
不能在同一选择语句的where子句中引用。
Date(timestamp)
返回日期部分
DATE_SUB(CURDATE(),INTERVAL 1 WEEK)
会在一天内返回相同的date
。
DATE_SUB(NOW(),INTERVAL 1 WEEK)
每一秒都会返回不同的timestamp
。
答案 1 :(得分: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)
转换为日期格式。
答案 2 :(得分: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