выберите значение из максимальной даты и времени для диапазона дат и времени - PullRequest
0 голосов
/ 17 июня 2020

У меня есть следующая SQL таблица серверов:

| InDate                  | ID     |  Value | Value2 | Value3    |
+-------------------------+--------+--------+--------+-----------+ 
| 2014-09-30 13:55:28.000 | 66     | 50     |      1 |         0 |
| 2014-09-30 10:05:36.000 | 66     | 60     |      2 |         0 | 
| 2014-10-01 08:31:21.000 | 66     | 20     |      3 |         0 |
| 2014-10-01 06:20:41.000 | 66     | 30     |      4 |         0 |

Я пытаюсь создать запрос, который принимает Value и SUM для Value2 и Value3 для каждого максимального InDate

Итак, я хочу получить

2014-09-30 13:55:28.000 | 66     | 50   | 1
2014-10-01 08:31:21.000 | 66     | 20   | 3

У меня следующий запрос

SELECT 
    MAX(InDate),
    MAX(Value),
    SUM (Value2 + Value3) AS valueSum
FROM  
    mytable
WHERE
    ID = 66
    AND CAST(InDate AS DATE) BETWEEN '2014-09-30' AND '2014-10-01'  
GROUP BY 
    CAST(InDate AS DATE)

Но это возвращает смешанные результаты, максимум Date , максимальное Value независимо от Date и удваивает (?) SUM. Итак, я получаю

2014-09-30 13:55:28.000 | 66     | 60   | 4
2014-10-01 08:31:21.000 | 66     | 30   | 8

Это неправильно.

Как я могу получить желаемый результат?

Спасибо

1 Ответ

0 голосов
/ 17 июня 2020

Думаю, вам нужна фильтрация. . . вот так:

select t.*, (value2 + value3)
from t
where t.indate = (select max(t2.indate)
                  from t t2
                  where t2.id = t.id and convert(date, t2.indate) = convert(date, t.indate)
                 ) ;

Здесь - скрипка db <>.

...