2015-04-21 3 views
2

У меня есть ниже таблицаВыберите значение для каждого первого числа месяца

enter image description here

Я хочу, чтобы выбрать значение [UsedSpace(MB)] для каждого первого числа месяца. Например, 1/5/2015 значение [UsedSpace(MB)] должно быть 10.

Я пробовал нижеследующий запрос, но безуспешно.

Select Cast(DATEADD(mm,DATEDIFF(mm,0,ExecuteTime),0) AS DATE) AS [Monthly], 
     [UsedSpace(MB)] 
from tbl_Test 
group by DATEADD(mm,DATEDIFF(mm,0,ExecuteTime),0), [UsedSpace(MB)] 
Order by DATEADD(mm,DATEDIFF(mm,0,ExecuteTime),0) 

Пожалуйста, любые предложения.

+0

Это похоже наложение сложнее. Почему бы просто не использовать 'WHERE DATEPART (d, ExecuteTime) = 1' –

ответ

1

Для предоставленных данных примера вы можете просто сделать предложение where в течение первого дня месяца. Если вам требуется более общее решение, вам нужно получить самую низкую дату для каждого месяца, а затем присоединиться к ней с исходной таблицей.

WITH cte AS 
(
    SELECT MIN(ExecuteTime) AS Monthly 
    FROM tbl_Test 
    GROUP BY DATEADD(m, DATEDIFF(m, 0, ExecuteTime), 0) 
) 
SELECT t.ExecuteTime, t.[UsedSpace(MB)] 
FROM tbl_Test AS t 
JOIN cte AS m 
ON t.ExecuteTime = m.Monthly 
ORDER BY t.ExecuteTime 
3

Если вы знаете, что у вас всегда будет одна запись для каждой даты, вы можете ограничить результаты в инструкции WHERE. Если в одной и той же дате может быть несколько записей или нет записи на дату, вы должны использовать функцию MIN.

SELECT 
    CAST(ExecuteTime as Date) AS Date, 
    UsedSpace 
FROM tbl_Test 
WHERE Day(ExecuteTime) = 1 
+0

Thanx hines работает. – Shehab

Смежные вопросы