1

PHP 管理者で mySQL を使用する際に問題があり、DB のクエリに問題があります。これはクエリ ステートメントです。

SELECT Record_ID, Datalog_ID, TIME, AVG( Value ) 
FROM  `Datalog_Values` 
WHERE Datalog_ID =  '241'
AND TIME
BETWEEN  '2012-06-01'
AND  '2012-06-30'
GROUP BY HOUR( TIME ) 

私が得ている結果は、最初の日の結果のみであり、期間ではありません。つまり、月です。

私の発言の何が問題なのですか????

4

3 に答える 3

1

Your query suffers from using a (mis)feature of MySQL called hidden columns. The query is choosing arbitrary values for Record_id, Datalog_id, and Time, because these are not mentioned in the group by clause.

If I speculate that the intended query is:

SELECT Record_ID, Datalog_ID, hour(TIME), AVG( Value ) 
FROM  `Datalog_Values` 
WHERE Datalog_ID =  '241' AND TIME BETWEEN  '2012-06-01' AND '2012-06-30'
GROUP BY Record_id, Datalog_id, hour(TimE ) 

Then this starts to make sense, assuming that the goal of the query is to produce results for each Record_Id and hour of the day for the given DataLog_id. Do you want results for each hour of the day or each hour of the month?

If you provide sample data and explain the output you want, then your question can be better answered.

于 2012-11-08T16:19:58.577 に答える
0

Time列に、where条件('YYYY-MM-DD')で指定した形式がある場合、Group By HOUR(TIME)は意味がありません。GROUPBYTIMEまたはGROUPBYMONTH(TIME)を実行してみてください

そうしないと、where条件が間違った方法になり、それぞれの最後にhh:mm:ssを追加する必要があります。

時間平均が必要な場合は、Time列のデータ型がDate / Timeであることを確認してください。これは、その形式が('yyyy / MM / dd hh:mm:ss')であることを意味します。

あなたがこのフォーマットを持っているなら、私はこのSOの質問だと思います-答えはあなたを助けるでしょう: 1時間あたりのDateTimeのカウントによるSQLServerグループ?

もちろんそれはSQLサーバー用ですが、あなたはその概念を理解するでしょう。そこで、毎日の時間ごとにグループ化する方法を確認できます。Group By Hour(Time)だけの場合は、毎日個別にではなく、月全体の特定の時間のグループ化が行われます。

于 2012-11-08T16:09:09.863 に答える
0

同じデータ型を使用して比較する必要があります。したがって、フィールドが日付/時刻 YYYY-MM-DD HH:MM:SS の場合BETWEEN、同じ形式を使用する必要があります。両方の日付の末尾に 00:00:00 を付けてみてください。

于 2012-11-08T16:07:37.870 に答える