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 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿