比如我有这样的数据:公司名 货物 创建时间
公司A 货物1 2010-05-10 14:20
公司A 货物2 2010-05-10 14:20
公司B 货物3 2010-05-10 14:30
公司B 货物4 2010-05-10 14:32
公司C 货物5 2010-05-10 15:03
我想做个视图只显示一个公司最新的一条货物,同一个创建时间的只能取其中一条
即:
公司A 货物1 2010-05-10 14:20(或货物2)
公司B 货物3 2010-05-10 14:30
公司C 货物5 2010-05-10 15:03我现在麻烦就在如果同一个公司的货物时间是同样的时候解决不了
请教大家怎么解决?
公司A 货物1 2010-05-10 14:20
公司A 货物2 2010-05-10 14:20
公司B 货物3 2010-05-10 14:30
公司B 货物4 2010-05-10 14:32
公司C 货物5 2010-05-10 15:03
我想做个视图只显示一个公司最新的一条货物,同一个创建时间的只能取其中一条
即:
公司A 货物1 2010-05-10 14:20(或货物2)
公司B 货物3 2010-05-10 14:30
公司C 货物5 2010-05-10 15:03我现在麻烦就在如果同一个公司的货物时间是同样的时候解决不了
请教大家怎么解决?
SQL> select * from goods;
COM_NAME GOODS_NAME CREATE_TIME
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
公司A 货物1 2010/5/10
公司A 货物2 2010/5/10
公司B 货物3 2010/5/10
公司B 货物4 2010/5/11
公司C 货物5 2010/5/10
SQL>
SQL> select * from goods a where a.rowid=(select max(b.rowid) from goods b where a.com_name=b.com_name
2 and a.create_time=b.create_time);
COM_NAME GOODS_NAME CREATE_TIME
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
公司A 货物2 2010/5/10
公司B 货物3 2010/5/10
公司B 货物4 2010/5/11
公司C 货物5 2010/5/10
FROM TAB
WHERE (公司名,创建时间) IN
(SELECT 公司名 ,MAX(创建时间)
FROM TAB
GROUP BY 公司名
)
AND ROWNUM=1
select 公司名,货物,创建时间 from table a
where exists(select 1 from table where a.公司名=公司名 and a.创建时间>创建时间)create view v_tabke as
select 公司名,货物,创建时间 from table a
where 创建时间 in(select max(创建时间) from table where a.公司名=公司名)
COM_NAME GOODS_NAME CREATE_TIME
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
公司A 货物1 2010/5/10
公司A 货物2 2010/5/10
公司A 货物6 2010/5/9
公司B 货物4 2010/5/11
公司B 货物3 2010/5/10
公司C 货物5 2010/5/10
6 rows selected
SQL>
SQL> select com_name,goods_name,create_time from (
2 select com_name,goods_name,create_time,row_number() over(partition by com_name order by create_time desc) rn from goods
3 )
4 where rn=1;
COM_NAME GOODS_NAME CREATE_TIME
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
公司A 货物1 2010/5/10
公司B 货物4 2010/5/11
公司C 货物5 2010/5/10
FROM table1 a
WHERE NOT EXISTS (SELECT 1
FROM table1 b
WHERE b.公司名 = a.公司名 AND
b.创建时间 >= a.创建时间 AND
b.rowid > a.rowid);