回答

收藏

SQL查询以查找日期之间的差异的平均值

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

我有一列的数据像
. W+ {  c+ f5 W) A4 d: ZDate
# U1 i8 `) p$ h% I13/8/2011
1 J3 L$ l1 {8 Z5 ]2/9/2011
+ Y4 N+ l7 X9 A$ f/ {6 D10/9/2011: z7 `* B0 q0 `- ?2 N2 r) A
20/9/2011
) T: U" M( Y. q7 h我需要编写一个SQL查询/过程,这将有助于我获取日期之间差异的平均值。对于上面的示例,它将是 (19 + 8 + 10)/3=12.33。
4 w$ t9 j- q; d4 o4 B# W# h. d0 J. Q请提供帮助。
$ A$ ^: r+ A8 A& K+ K+ Y' T( B6 Y% E# z在此先感谢Geetha
9 h4 a8 j* l* x2 l+ U. H+ i4 P! {                # v1 J4 @" X2 W8 H' c, B" H+ T: b
解决方案:2 e8 S; f' Z8 e, j0 Y2 O4 {8 d+ x
                & K3 T' F/ A& n3 n7 t. c

& `' t) y+ Q3 [1 n  O5 [6 c2 `, N" \1 w" u8 W8 X
                我不知道您的RDBMS,但这是来自SQL Server。另外,您的计算之一是错误的-02/09/2011-13/08/2011是20,而不是19。
6 j. [8 d2 b2 F9 l# a2 icreate table dates (5 i7 o  t0 Z1 N) n& c1 e
    myDate  date
5 i; S/ H& ?9 ^% D) h% ^)0 h& a/ N7 Y: ^
insert into dates
7 a2 I; A* ^- U4 X- uvalues ({d '2011-08-13'}),
! y2 ?: L2 u- x3 {3 f1 w/ F    ({d '2011-09-02'}), 3 \  R8 Q! z2 s. A( r
    ({d '2011-09-10'}),
6 [  t* Y4 Q; g    ({d '2011-09-20'})% I' E( P; f$ O8 D& g
;with orderedDates as (
. J- u$ v6 y! r3 d, C2 X8 B    select ROW_NUMBER() OVER (order by myDate) as row, myDate
7 F9 v0 w( O- ?    from dates
6 B# {/ B; [, y( I% H+ E" @3 k), datediffs as (
% ]/ Y5 \* a; b5 y; c$ g& V6 N/ e    select DATEDIFF(dd, o2.myDate, o1.myDate) as diff3 \% k! J( y- X* m( A& ~, @  ^
    from orderedDates o1 left outer join* K% O* ^+ k, {% _/ b
        orderedDates o2 on o1.row = o2.row + 12 p6 m  z0 g' h
)4 z; d# \- Z- R; z9 c9 ]" X+ a
select AVG(cast(diff as decimal)); z$ U) J2 |! a, r! p0 B
from datediffs
! z2 i/ K- L! `( _8 ~! o4 Gwhere diff is NOT NULL
" l/ u& [! Y- U产生的结果是12.667:(20 + 8 + 10)/ 3。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则