2 woshizhuyoulei woshizhuyoulei 于 2016.09.10 21:20 提问

oracle中用一个sql实现要求

有一个表,大概几千行记录,里面有ip 时间 id等一些字段,ip只有几个不重复的值,时间都不同,现在要取出每一个不同ip对应的最近时间的一条记录,能不能只用一个sql语句得出结果。

6个回答

zhuzige521888
zhuzige521888   2016.09.10 21:43
已采纳

用开窗函数比较简单 具体如下 :
SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY ip ORDER BY time DESC) rn, t.* FROM tablename t) WHERE rn = 1 ;

zhuzige521888
zhuzige521888 =0就是第一条,<=1 就是前两条,<=2,就是前三条
接近 2 年之前 回复
zhuzige521888
zhuzige521888 create table dtest( dip number, dtime date, dname varchar(20) ) select * from duan a where (select count(1) from duan b where a.dip = b.dip and b.dtime > a.dtime ) <=1 order by dip,dtime;
接近 2 年之前 回复
zhuzige521888
zhuzige521888 回复哎梦哦彼咯: 多个字段用开窗函数第二个select后加上你想要的字段,或者tablename.*,groupby的不行。
接近 2 年之前 回复
woshizhuyoulei
woshizhuyoulei 这样能得到每一个ip的最近一条记录吗
接近 2 年之前 回复
woshizhuyoulei
woshizhuyoulei 我想得到一整条记录 这样出来只有两个字段
接近 2 年之前 回复
zhuzige521888
zhuzige521888 这种也可以:select ip,max(time) from tablename group by ip;
接近 2 年之前 回复
zhuzige521888
zhuzige521888 oracle进行分组后,取出每组的前几条数据SELECT *FROM (SELECT 分组的字段名, ROW_NUMBER() OVER(PARTITION BY 分组的字段名 ORDER BY 排序的字段名) AS RNFROM 表名)WHERE RN <= 10??
接近 2 年之前 回复
caoxiaohucxh
caoxiaohucxh   2016.09.13 21:41

select ip,time,id from (select * from t order by time desc)group by ip

Samme
Samme   2016.09.11 19:21

表 abc 字段ip ,时间 date
Select max(ip),(Select max(date) From abc b where date=a.date) date
From abc a
Group by ip

qq_23898511
qq_23898511   2016.09.12 10:00

给你写详细一点,望采纳:
表A:
唯一标识 : id ,其他字段:ip ,时间:atime
需求(取到表内”ip”最近一次时间的数据)
----------------------------------------------------------------
第一步:取到所有关于“ip”字段最新一次数据
select ip,max(atime)maxtime from A group by ip
第二步:关联A表取到所有数据
select A.* from A inner join (select ip,max(atime)maxtime from A group by ip)a2 on A.ip=a2.ip and a.time=a2.maxtime

lpsky0865
lpsky0865   2016.09.12 11:26

呵呵,何必那么麻烦,一条语句就可以了。
表名table, 最近一次时间的数据,应该使用rowid较大的那一条

 select * from table a where not exists (
        select 1 from table b where a.ip = b.ip and b.rowid > a.rowid
);
yushiyoufight
yushiyoufight 揣测了
接近 2 年之前 回复
beyon2008
beyon2008   2016.10.19 09:34

select *
from t
where (ip, dt) in (select ip, max(dt) lastdt from t group by ip)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
[SQL] 利用函数(Function)判断输入的数是不是质数
作用: EN:Description: Determines if a given integer is a prime;     JP:入力したデータが素数かどうか判断する;     CN:判断输入的数是不是质数; SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ====================================
(通过SQL*Plus)Oracle创建表空间、用户并授予权限命令,切换当前用户
创建数据表空间:create tablespace test_data logging datafile E:/oracle/product/10.2.0/oradata/testserver/test_data01.dbf size 32m autoextend on next 32m maxsize 2048m extent management local;
PL/SQL语句学习之使用while、loop和for三种循环打印数字的1-10
--使用while循环打印数字的1-10 --set serveroutput on declare --定义循环变量赋初值为1 pnum number := 1; begin while pnum<=10 loop --循环体 dbms_output.put_line(pnum); --使得该变量+1
Oracle:PL/SQL--流程控制——作业练习:向表中循环插入ID编号
–实验1—向表中循环插入ID编号 需求说明: 在PL/SQL中编写语句块实现向T_stu表的ID列循环插入编号,编号范围从1到15 --先查询一下有木有 T_stu表 select * from t_stu;--删除T_stu表中全部数据 delete T_stu; /* 提交事务(Oracle中,修改表中数据后,需要点击 提交 或 命令提交,才能数据库中数据更改 */ commit;decla
在Oracle中插入一行,能不能自动产生一个唯一的序列数作为主键的值
ORACLE生成唯一标识的方法与SQL和SYBASE不同,它使用序列号发生器。序列号发生器是一种数据库对象。下面的语句可以创建一个序列号发生器sql_1: create sequence sq_1; sq_1是自己命名的 使用序列号发生器时,这样引用:sq_1.nextval 例如,插入表student(id number,name varchar2(20)): insert i
创建INSERT、DELETE、UPDATE 触发器示例 .
触发器是基于一个表创建的,但是可以针对多个表进行操作。所以触发器可以用来对表实施复杂的完整性的约束,当触发器所保存的数据发生改变时,触发器所保存的数据发生改变时,触发器被自动激活,从而防止对数据的不正确修改。         下面对每个INSERT、DELETE、UPDATE触发器举一个小例子来加深理解: INSERT触发器:         INSERT触发器就是当对定义触发器的表执行IN
oracle数据库设计实例
1)要求 设计一个网上购物程序(使用powerdesigner建立模型并编写测试数据)。有一下需求: 管理员可以在后台添加商品,每个商品属于一个商品组 可以对管理员进行分组,对每一组进行分别授权,即一个管理员组可以有多个管理员,一个管理员组有多个权限,一个管理员可以在多个组 用户可以自己购买商品,购买商品时要在订单表中添加信息,一个用户可以同时购买多个商品,用户可
如何在SQL Server和Oracle中创建job
     有的时候,我们可能需要在数据库中设定一些自动执行的任务(job),以此来自动完成一些包括统计、备份方面的需求,下面就简单说明一下有关ms server和oracle两种数据库中如何新建自动任务。    首先说下ms server,因为我也是新手,所以首先选择了使用企业管理器进行任务设定,然后再导出设计完毕的任务脚本,这样就可以在其他数据库中直接通过执行脚本的形式来新建
SQLServer 2016安装时的错误:Polybase要求安装Oracle JRE 7更新51或更高版本
下载JDK7就可以了(装8是不可以解决的) http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 重新运行下  Polybase: https://blogs.msdn.microsoft.com/linmo/2013/01/28/polybase-sql-server
110.Oracle数据库SQL开发之 视图——创建并使用视图
110.Oracle数据库SQL开发之 视图——创建并使用视图 欢迎转载,转载请标明出处: 视图实际上是一个或多个表上的预定义查询,这些表称为基表(base table). 从视图中检索信息与从表中检索信息的方法完全相同。          视图中并不存储着行,它们始终存储在表中。          User_tables,user_sequences和user_indexes都是视图