computerlover_个人页

个人头像照片 computerlover
0
4
0

个人介绍

暂无个人介绍

擅长的技术

获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
暂无更多信息
正在加载, 请稍后...
暂无更多信息
  • 回答了问题 2019-07-17

    更复杂(查找错误记录,postgresql,关于月累,年累)

    例如:
    id 日期 名称 单位 数据 类别 状态 备注 月累 年累 数据源
    1780114 2015-01-16 外供电 度 9000 电 接收 144000 144000 <NULL>
    1780115 2015-01-16 电消耗 度 14880 电 消耗 237208 237208 <NULL>
    -- 1780117 2015-01-16 自发电 度 5880 电 生产 93208 93208 <NULL> 实际月累是 93208
    1780117 2015-01-16 自发电 度 5880 电 生产 0 93208 <NULL>
    1780222 2015-01-17 外供电 度 8700 电 接收 152700 152700 <NULL>
    -- 1780223 2015-01-17 电消耗 度 14628 电 消耗 251836 251836 <NULL> 丢失,需要找出来
    1780225 2015-01-17 自发电 度 5928 电 生产 99136 99136 <NULL>
    1780288 2015-01-18 外供电 度 8100 电 接收 160800 160800 <NULL>
    1780289 2015-01-18 电消耗 度 14340 电 消耗 266176 266176 <NULL>
    1780291 2015-01-18 自发电 度 6240 电 生产 105376 3 <NULL>
    -- 1780291 2015-01-18 自发电 度 6240 电 生产 105376 105376 <NULL> 实际年累是 266176

    查询结果应该是:
    2015-01-16 自发电 度 电 生产
    2015-01-17 电消耗 度 电 消耗
    2015-01-18 自发电 度 电 生产

    踩0 评论0
  • 提交了问题 2015-12-23

    更复杂(查找错误记录,postgresql,关于月累,年累)

  • 回答了问题 2019-07-17

    查找错误记录(SQL)

    谢谢了,下面是postgresql 的SQL写法。

    -- p1 昨天的日期
    -- p2 当月统计数据范围内,上一条月累加值
    -- p3 当年统计数据范围内,上一条年累加值
    -- p4 当月统计数据范围内,第一条月累加值
    -- p5 当月统计数据范围内,第一条日值
    -- p6 当年统计数据范围内,第一条年累加值
    -- p7 当年统计数据范围内,第一条日值

    select * from
    (

    select v_d, data, month, year, 
    lag(v_d, 1) over (order by v_d) p1, 
    lag(month, 1) over (partition by extract(month from v_d) order by v_d) p2,
    lag(year, 1) over (partition by extract(year from v_d) order by v_d) p3,
    first_value(data) over(partition by extract(month from v_d) order by v_d) p4, 
    first_value(month) over(partition by extract(month from v_d) order by v_d) p5,
    first_value(data) over(partition by extract(year from v_d) order by v_d) p6, 
    first_value(year) over(partition by extract(year from v_d) order by v_d) p7 
    from tbl)

    t
    where v_d - p1 <>1
    or
    p4 <> p5
    or
    p6 <> p7
    or
    p2+data <> month
    or
    p3+data <> year;


    不知道这种写法对不对。在这个简单例子里可以得到期望结果。

    sum(data) over (partition by extract(month from v_d) order by v_d) as 计算月累,
    如果记录里年不都是一年,结果就不对。
    希望大拿帮助一下,解释partition by extract(month from v_d),谢谢了。
    select * from
    (

    select v_d, data, 
    month,
    sum(data) over (partition by extract(month from v_d) order by v_d) as 计算月累,
    year,
    sum(data) over (partition by extract(year from v_d) order by v_d) as 计算年累,
    lag(v_d, 1) over (order by v_d) p1
    from tbl

    ) t
    where v_d - p1 <>1
    or
    month <> 计算月累
    or
    year <> 计算年累

    踩0 评论0
  • 提交了问题 2015-12-22

    查找错误记录(SQL)

正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息