选择每月第一天的值

时间:2015-04-21 22:56:35

标签: sql sql-server-2008

我有下表

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)

请提出任何建议。

2 个答案:

答案 0 :(得分:3)

如果您知道每个日期总是有一条记录,那么您可以在WHERE语句中限制结果。如果同一日期可能有多个记录或者某个日期没有记录,那么您应该使用MIN函数。

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

答案 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