2016-10-03 11 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は同じselect文のwhere句で参照することができません。

  • Date(timestamp)は、日付部分

  • DATE_SUB(CURDATE(),INTERVAL 1 WEEK)は一日を通して同じdateを返します。

  • DATE_SUB(NOW(),INTERVAL 1 WEEK)は、1秒ごとに異なる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 
関連する問題