gpt4 book ai didi

sql - 获取定义相等时间段的记录的总和/平均值

转载 作者:行者123 更新时间:2023-12-04 05:28:00 28 4
gpt4 key购买 nike

我有以下信息(按 View 返回):

DateTime   ItemID  UserTyp Seconds

2012-01-01 10 S 12

2012-01-01 10 S 18

2012-01-01 11 S 22

2012-01-02 11 M 52

2012-01-02 10 S 120

2012-01-02 11 S NULL

2012-01-03 15 M 112

2012-01-03 12 S 182

2012-01-04 10 M NULL

我需要做的是按用户类型计算所有秒数的总和,但要计算五个时间段。

期间的设置方式如下:
  • 获取第一个和最后一个日期
  • 全天分五日
  • 除法的结果是一个周期包含的天数

  • 然后对于每个时期,根据记录的日期时间和用户类型,我应该提出以下记录:
    Periods  UserTypeS_SUM(Seconds) UserTypeM_SUM(Seconds)
    1
    2
    3
    4
    5

    另外,我应该在进行除法之前检查是否至少有 5 条记录 - 例如,如果我有 4 条记录,则只会使用一个期间。

    我知道它看起来并没有什么不同,我已经开始使用函数来制作解决方案,但对我来说它看起来有点无效。是否有一些内置函数可以轻松做到这一点?

    编辑:我真的很抱歉,但我忘记提到我应该在 View 或表值函数中使用它。在这种情况下不允许存储过程。

    最佳答案

    试试这个:

    ;with cte as(
    select *,NTILE(5) over(order by [DateTime]) as period
    from Table1
    ),
    type_S as( select period,SUM([Seconds]) as UserTypeS_SUM
    from cte
    where [UserTyp]='S'
    group by period),
    type_M as( select period,SUM([Seconds]) as UserTypeM_SUM
    from cte
    where [UserTyp]='M'
    group by period),
    seq as (
    select 1 as sno union all
    select 2 union all
    select 3 union all
    select 4 union all
    select 5 )
    select seq.sno as period,UserTypeS_SUM, UserTypeM_SUM
    from seq
    left join type_s s
    on seq.sno=s.period
    left join type_m m
    on seq.sno=m.period

    SQL fiddle demo

    关于sql - 获取定义相等时间段的记录的总和/平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12969806/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com