Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择每月第一天的值_Sql_Sql Server 2008 - Fatal编程技术网

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