|
给定一个表Event,该表包含一个名为EventTimeDateTime类型的字段,并且该值将包含日期和时间元素,我需要创建一个摘要查询,该查询对每个月的事件数进行计数。: [0 y& w: X1 q0 l' x+ R( d
分组依据字段的结果类型还必须是带有0时间元素的日期时间,并设置为每月的第一天。
, w, v l {# N7 ?4 r+ _到目前为止,这就是我所拥有的,但是它不是很优雅,我不确定它是否特别有效。& I* X* r' C- B/ c7 f; P
SELECT COUNT(1) AS [CountOfEvents],
- l& h7 }6 d3 R. T% {9 N. k1 |4 i DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime))) AS [Month]
' w7 Y& M+ m2 R FROM [Event]8 l% R1 y1 J$ c4 X- X
GROUP BY DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime)))! L5 O! ~ w' S `# g# r3 o
更好的建议,以获得更高的效率或更优雅?; U" u6 _" K: G, K! u9 |6 O2 }2 o
5 }% Y( J' J* e& y& u% R解决方案:
# J. C ^8 S/ N4 ` 5 ~0 P4 f/ [: Q, c5 ]6 Z% ~
c7 [1 T U! X4 S+ X: O6 ], j$ j+ d5 w
到本月的下限:0 u: S& W5 m0 g7 Y
select dateadd(month,datediff(m,0,GETDATE()),0);& b' e; ^: K0 t
输出:
% B5 H4 p$ ]. }+ S `-----------------------" n+ d/ ~9 q" ^1 _- F, D
2009-10-01 00:00:00.000" j5 d8 g% q0 P
(1 row(s) affected)$ h1 y N: L( [& l9 }4 m
所以试试这个:
" D0 G/ u3 J' g/ X$ K: D( gSELECT
& i, F8 j% v7 a8 d/ A7 N COUNT(*) as CountOF8 Q4 x$ I/ y* @6 n4 H/ O3 j) Z
,dateadd(month,datediff(m,0,EventTime),0)/ | J1 r0 |2 p. \5 V- p
FROM [Event], `" A. k. g2 W4 k2 J' E o$ f) ~
GROUP BY dateadd(month,datediff(m,0,EventTime),0)
* E+ I5 a7 ]/ X( Q5 w" k ORDER BY 2 |
|