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个回答

首先我想你可以先把同一创建时间有多条数据数据的创建时间查询出来,比如: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 。
希望对你有所帮助,

你这个问题可以通过动态产生列,具体还是挺麻烦的,给你一个可能可以的查询语句,先试试:
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


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

m294955408
偷偷的挂掉 param和value是列名,也要换成你的。param就是存name,age的那个列,value就是存具体值(tom,jack,23,24)的那一列。
大约 3 年之前 回复

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.创建时间

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

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
--更新--
--将中文名称对应到实际字段和表名称,执行即可一条记录查询到姓名、年龄、创建时间

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问