w405722907
马大头
2017-05-31 06:10
采纳率: 59.1%
浏览 1.6k

SQL如何查询出同一时间的数据

Oracle数据,用以下形式存储,比如以下表格:

参数名 参数值 创建时间
name tom 2017/5/31 12:12:12
name jack 2017/4/20 14:10:10
name jerry 2017/3/10 16:16:16
age 23 2017/5/31 12:12:12
age 24 2017/4/20 14:10:10
age 25 2017/3/10 16:16:16
……

现在将创建时间相同的数据判断为同一个人的数据,那么我该如何一条一条取出全部每个人的名称,年龄,和创建时间?
如 :
tom 23 2017/5/31 12:12:12
jack 24 2017/4/20 14:10:10
jerry 25 2017/3/10 16:16:16

如果group by 创建时间,那么就只能取到创建时间,取不到人名和年龄.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • huoxin4415
    huoxin4415 2017-05-31 06:53
    已采纳

    首先我想你可以先把同一创建时间有多条数据数据的创建时间查询出来,比如:select create_date from table_name group by create_date having count(*) > 1。
    然后根据该时间点左关联数据表,查询出你想要的数据,比如:select * from (select create_date from table_name group by create_date having count(*) > 1) c left join table_name t on c.create_date = t.create_date order by c.create_date 。
    希望对你有所帮助,

    点赞 评论
  • m294955408
    偷偷的挂掉 2017-05-31 06:42

    你这个问题可以通过动态产生列,具体还是挺麻烦的,给你一个可能可以的查询语句,先试试:
    select
    create_time,
    max(name),
    max(age)
    from (select create_time,
    (case param when 'name' then value end) As name,
    (case param when 'age' then value end) As age
    from table ) as a

    group by a.create_time

    
    

    注意里面的表名换成你的表名

    点赞 评论
  • u014074697
    张大教主 2017-05-31 07:18

    select * from
    (select 参数值 as name, 创建时间 as nameTime
    from 表
    where 参数名='name') a
    left join
    (select 参数值 as age, 创建时间 as ageTime
    from 表
    where 参数名='age' )b
    on a.创建时间=b.创建时间

    --将中文名称对应到实际字段和表名称,执行即可一条记录查询到姓名、年龄、创建时间

    点赞 评论
  • u014074697
    张大教主 2017-05-31 07:21

    select * from
    (select 参数值 as name, 创建时间 as nameTime
    from 表
    where 参数名='name') a
    left join
    (select 参数值 as age, 创建时间 as ageTime
    from 表
    where 参数名='age' )b
    on a.nameTime=b.ageTime
    --更新--
    --将中文名称对应到实际字段和表名称,执行即可一条记录查询到姓名、年龄、创建时间

    点赞 评论

相关推荐