3

テーブルからログ データを取得しようとしています。タイムスパンを選択する場所 (「maandag」から「vrijdag」まで)。これにより、必要な結果が得られますが、1 日あたり 3 つの測定値のみを表示するという質問が表示されます。

1 つ目は 8 時以降の最初のもの 2 つ目は 14 時以降の最初のもの、3 つ目は 20 時以降の最初のもの

私が抱えている問題は、測定の時間が一定でないことです。そのため、正規表現を使用して 1 日の一部を選択しても機能しません。以下のクエリを使用すると、1 日に 2 つまたは 4 つ、あるいはそれ以上の結果が得られることもあります。これは、基本的に測定間の時間は 2 時間ですが、これは一定ではなく、次の日の測定が同じ時間になるためです。

1日の一部でグループ化することはできますか? または、他にどのような解決策がありますか?

data:
id datumTijd ph tbc temperatuur vbc gbc
1 2012-10-03 14:59:19 7.30.08 24.91 0.02 0     
1 2012-10-03 16:47:38 7.33.07 22.15 0.12 0
3 2012-10-03 17:03:06 7.31.09 23.23 0.05 0


query:
SELECT N.name, D.datumTijd, ROUND(D.gbc,2), ROUND(D.vbc,2), ROUND(D.tbc,2),ROUND(D.ph,2), ROUND(D.temperatuur,1)  
FROM METING.Name N, METING.Data D 
Where D.datumTijd BETWEEN "'+maandag+' 00:00:00" AND "'+vrijdag+' 23:59:59"  
AND N.id = D.id AND D.datumTijd 
AND D.datumTijd REGEXP "0[78]:..:..|1[34]:..:..|2[12]:..:.."';
ORDER BY N.name, D.datumTijd 
4

1 に答える 1

5

このようにして、結果を 3 つの異なる期間にグループ化できます。次に、メジャーで集計関数 (SUM、MIN、MAX) を使用できます。

SELECT   DATE(D.datumTijd),
         CASE WHEN TIME(D.datumTijd) BETWEEN '08:00:00' AND '14:00:00' THEN 1
              WHEN TIME(D.datumTijd) BETWEEN '14:00:00' AND '20:00:00' THEN 2
              WHEN TIME(D.datumTijd) BETWEEN '20:00:00' AND '24:00:00' THEN 3
         END as period
...
GROUP BY DATE(D.datumTijd),
         CASE WHEN TIME(D.datumTijd) BETWEEN '08:00:00' AND '14:00:00' THEN 1
              WHEN TIME(D.datumTijd) BETWEEN '14:00:00' AND '20:00:00' THEN 2
              WHEN TIME(D.datumTijd) BETWEEN '20:00:00' AND '24:00:00' THEN 3
         END
于 2012-12-10T17:55:19.007 に答える