withchenfang 2013-11-12 05:59 采纳率: 100%
浏览 2214
已采纳

oracle中时间点数据查询问题

从数据表中查询出来0点半,1点,1点半...以此类推到24点这48个时间点的数据 如果没有时间刚好相等的数据,则返回最接近这个时间的数据 比如0点半没有数据,则返回0点到0点半之间,时间最接近0点半的一条数据,如果一条数据都没有,则返回空。
数据结构如下:create table TEST
(
id NUMBER(4),
sid NUMBER(4),
time VARCHAR2(20),
value VARCHAR2(200)
)

返回如下: sid 0点半value 1点value 1点半value....
1 value1 v2 v3 ...
2 空 vv 12
....

希望大婶们帮帮忙

  • 写回答

1条回答

  • 天才在左-疯子在右 2013-11-12 09:21
    关注

    建表:
    create table TEST
    (
    id NUMBER(4),
    sid NUMBER(4),
    time date,
    value VARCHAR2(200)
    )

    这里不知道你的sid,id是什么意思.id应该是主键 ,sid是指时间点吗?如果是时间点的那这问题还会更简单。我这里没有用这个值。

    插值:
    insert into TEST (ID, SID, TIME, VALUE)
    values ('1', '1', to_date('12-11-2013 05:00:00', 'dd-mm-yyyy hh24:mi:ss'), '1');

    insert into TEST (ID, SID, TIME, VALUE)
    values ('2', '2', to_date('12-11-2013 10:58:00', 'dd-mm-yyyy hh24:mi:ss'), '2');

    insert into TEST (ID, SID, TIME, VALUE)
    values ('3', '3', to_date('12-11-2013 04:02:00', 'dd-mm-yyyy hh24:mi:ss'), '3');

    insert into TEST (ID, SID, TIME, VALUE)
    values ('4', '4', to_date('12-11-2013 03:00:00', 'dd-mm-yyyy hh24:mi:ss'), '4');

    insert into TEST (ID, SID, TIME, VALUE)
    values ('5', '5', to_date('12-11-2013 04:06:00', 'dd-mm-yyyy hh24:mi:ss'), '5');

    insert into TEST (ID, SID, TIME, VALUE)
    values ('6', '6', to_date('12-11-2013 04:57:00', 'dd-mm-yyyy hh24:mi:ss'), '6');

    查询:
    select t3.team,t2.value
    from (select distinct first_value(t.value) over(partition by to_number(to_char(t.time, 'hh24')) * 2 +
    ceil(to_number(to_char(t.time, 'mi')) / 30) order by abs(t.time-trunc(t.time,'hh24')) rows between 1 preceding and 1 following) value,
    to_number(to_char(t.time, 'hh24')) * 2 +
    ceil(to_number(to_char(t.time, 'mi')) / 30) team
    from TEST t) t2
    right join (select rownum team from dual connect by level < 49) t3
    on t3.team = t2.team
    order by t3.team

    结果:
    rownum team value
    1 1

    2 2

    3 3

    4 4

    5 5

    6 6 4
    7 7

    8 8

    9 9 3
    10 10 1
    11 11

    12 12

    13 13

    14 14

    15 15

    16 16

    17 17

    18 18

    19 19

    20 20

    21 21

    22 22 2
    23 23

    24 24

    25 25

    26 26

    27 27

    28 28

    29 29

    30 30

    31 31

    32 32

    33 33

    34 34

    35 35

    36 36

    37 37

    38 38

    39 39

    40 40

    41 41

    42 42

    43 43

    44 44

    45 45

    46 46

    47 47

    48 48

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler