

Microsoft SQL Server 2012を使っています。

例えば以下のようなレコードをもつテーブルがあるとします。  
レコードは10分毎の1ヶ月分のデータになります。(4032Row)  
DateTime, Value1, Value2  
2018-02-01 00:10:00 0.3 0.3  
2018-02-01 00:20:00 0.3 0.6  
2018-02-01 00:30:00 0.5 1.1  
2018-02-01 00:40:00 0.2 1  
2018-02-01 00:50:00 0.4 1.1  
2018-02-01 01:00:00 0.1 0.7  
...  
2018-02-28 24:00:00 0.1 0.7

ここで行いたいことは  
「毎日のValue2の最大値とその時間を返す」ことです。

例えば、上の例だった場合 2/1のValue2の最大値が1.1であった場合、クエリの戻り値は  
2018-02-01 00:30:00 0.5 1.1  
であってほしいです。  
Value2に1.1が複数ある場合は最初のレコードを最大値を記録した最初のレコードとして、DateTimeフィールド、Value1フィールドの値を受け取ります。

ここで試してみたクエリは以下の通りでした。

[code]

    SELECT FORMAT(DateTime, 'yyyyMMdd'), MAX(dblValue2) 
    FROM TableA  
    Group BY FORMAT(DateTime, 'yyyyMMdd')
    
[/code]

これだと各日のMAX値は取れたのですが、そのMAX値を記録した日付が取得できませんでした。。

どなたか、解決するための良いクエリのご教授よろしくお願いします。

※WHILEで以下にもCみたいにプログラマブルに書けば解決はできるのですが…  
せっかくなのでクエリで解決したいです。


CC BY-SA 3.0
2018-04-15T00:18:42.987
43246
2018-04-16T04:23:46.457
12388
question
sql
MAX値を記録した他のフィールド取得


試してないけど...

[code]

    SELECT TableA.DateTime, TableA.dblValue1, TableA.dblValue2
    FROM ( SELECT MIN(TableA.DateTime) AS D2
           FROM ( SELECT FORMAT(DateTime, 'yyyyMMdd') AS D1, MAX(dblValue2) AS V1
                  FROM TableA  
                  GROUP BY FORMAT(DateTime, 'yyyyMMdd')
                ) AS Q1
           INNER JOIN TableA
           ON FORMAT(TableA.DateTime, 'yyyyMMdd') = Q1.D1 AND TableA.dblValue2 = Q1.V1
           GROUP BY FORMAT(TableA.DateTime, 'yyyyMMdd')
         ) AS Q2
    INNER JOIN TableA
    ON TableA.DateTime = Q2.D2
    ORDER BY TableA.DateTime
    
[/code]


CC BY-SA 3.0
2018-04-15T01:45:54.327
43248
2018-04-16T04:23:46.457
2018-04-16T04:23:46.457
19110
43246
answer