回答

收藏

用于获取DateTime的T-SQL代码仅包含来自任何DateTime的Month和Year

技术问答 技术问答 242 人阅读 | 0 人回复 | 2023-09-14

给定一个表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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则