Sql 选择每月第一天的值
我有下表 我想为每个月的第一天选择Sql 选择每月第一天的值,sql,sql-server-2008,Sql,Sql Server 2008,我有下表 我想为每个月的第一天选择[UsedSpace(MB)]的值。 例如,2015年1月5日的[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)]
的值。
例如,2015年1月5日
的[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)
请提供任何建议。对于提供的示例数据,您只需在每月的第一天创建一个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
如果您知道每个日期都有一条记录,那么可以在WHERE语句中限制结果。如果同一日期可能有多条记录,或者某一日期没有记录,则应使用MIN函数
SELECT
CAST(ExecuteTime as Date) AS Date,
UsedSpace
FROM tbl_Test
WHERE Day(ExecuteTime) = 1
这似乎很复杂。为什么不直接使用
WHERE DATEPART(d,ExecuteTime)=1