2016-10-03 27 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 WEE)...' – 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不能在同一select語句的where子句中提到。

  • 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