- 浏览: 581848 次
- 性别:
文章分类
- 全部博客 (141)
- java (33)
- spring (6)
- struts2 (4)
- log4j (1)
- sql (8)
- oracle (11)
- 设计模式 (2)
- jsp (2)
- 谈学习 (5)
- gson (3)
- svn (1)
- lucene (1)
- 杂谈 (7)
- hibernate (5)
- play framework (4)
- 页面前端 (16)
- linux (9)
- tomcat (2)
- php (2)
- maven实战 (4)
- HornetQ (1)
- SAE (1)
- Hessian (2)
- 应用 (11)
- 在北京生活感悟 (2)
- apache (1)
- BI (1)
- hadoop系列 (1)
- mongodb (1)
- cache (1)
- 数据结构 (1)
- hive (1)
最新评论
-
AK472AK47:
...
gson java对象与json转换(实例代码说明及教程) -
TryRelax:
update t_h5activity_pagedata ...
mysql update更新带子查询的实现方式 -
CurryKobe:
js中的三大特性:继承、封装、多态 -
bruce.yuan:
一看 tps为168k次/秒 ,我就觉得不专业了 。请把完整的 ...
rpc介绍 -
一抹暗香:
牛逼!
去掉IE浏览器滚动条最简单的方法
举一个简单的例子(查询出多个记录任意取一条):
现有表aaa,
A B
aaa 1
aaa 2
bbb 3
bbb 4
bbb 5
bbb 6
ccc 7
ccc 8
执行select t.* from aaa t where t.b = (select b from aaa where a = t.a and rownum<2)的结果如下:
A B
aaa 1
bbb 3
ccc 6
下面有好多方法,来自一位高手列举的:
现有表aaa,
A B
aaa 1
aaa 2
bbb 3
bbb 4
bbb 5
bbb 6
ccc 7
ccc 8
执行select t.* from aaa t where t.b = (select b from aaa where a = t.a and rownum<2)的结果如下:
A B
aaa 1
bbb 3
ccc 6
下面有好多方法,来自一位高手列举的:
/* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b 5 b5b5b5b5b5 */ --创建表并插入数据: create table tb(name varchar(10),val int,memo varchar(20)) insert into tb values('a', 2, 'a2(a的第二个值)') insert into tb values('a', 1, 'a1--a的第一个值') insert into tb values('a', 3, 'a3:a的第三个值') insert into tb values('b', 1, 'b1--b的第一个值') insert into tb values('b', 3, 'b3:b的第三个值') insert into tb values('b', 2, 'b2b2b2b2') insert into tb values('b', 4, 'b4b4') insert into tb values('b', 5, 'b5b5b5b5b5') go --一、按name分组取val最大的值所在行的数据。 --方法1: select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name --方法2: select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val) --方法3: select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name --方法4: select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name --方法5 select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name /* name val memo ---------- ----------- -------------------- a 3 a3:a的第三个值 b 5 b5b5b5b5b5 */ --二、按name分组取val最小的值所在行的数据。 --方法1: select a.* from tb a where val = (select min(val) from tb where name = a.name) order by a.name --方法2: select a.* from tb a where not exists(select 1 from tb where name = a.name and val < a.val) --方法3: select a.* from tb a,(select name,min(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name --方法4: select a.* from tb a inner join (select name , min(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name --方法5 select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val < a.val) order by a.name /* name val memo ---------- ----------- -------------------- a 1 a1--a的第一个值 b 1 b1--b的第一个值 */ --三、按name分组取第一次出现的行所在的数据。 select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name /* name val memo ---------- ----------- -------------------- a 2 a2(a的第二个值) b 1 b1--b的第一个值 */ --四、按name分组随机取一条数据。 select a.* from tb a where val = (select top 1 val from tb where name = a.name order by newid()) order by a.name /* name val memo ---------- ----------- -------------------- a 1 a1--a的第一个值 b 5 b5b5b5b5b5 */ --五、按name分组取最小的两个(N个)val select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val < a.val ) order by a.name,a.val select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.val select a.* from tb a where exists (select count(*) from tb where name = a.name and val < a.val having Count(*) < 2) order by a.name,a.val /* name val memo ---------- ----------- -------------------- a 1 a1--a的第一个值 a 2 a2(a的第二个值) b 1 b1--b的第一个值 b 2 b2b2b2b2 */ --六、按name分组取最大的两个(N个)val select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name,a.val select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val desc) order by a.name,a.val select a.* from tb a where exists (select count(*) from tb where name = a.name and val > a.val having Count(*) < 2) order by a.name , a.val /* name val memo ---------- ----------- -------------------- a 2 a2(a的第二个值) a 3 a3:a的第三个值 b 4 b4b4 b 5 b5b5b5b5b5 */ --七,如果整行数据有重复,所有的列都相同。 /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 1 a1--a的第一个值 a 3 a3:a的第三个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b 5 b5b5b5b5b5 */ --在sql server 2000中只能用一个临时表来解决,生成一个自增列,先对val取最大或最小,然后再通过自增列来取数据。 --创建表并插入数据: create table tb(name varchar(10),val int,memo varchar(20)) insert into tb values('a', 2, 'a2(a的第二个值)') insert into tb values('a', 1, 'a1--a的第一个值') insert into tb values('a', 1, 'a1--a的第一个值') insert into tb values('a', 3, 'a3:a的第三个值') insert into tb values('a', 3, 'a3:a的第三个值') insert into tb values('b', 1, 'b1--b的第一个值') insert into tb values('b', 3, 'b3:b的第三个值') insert into tb values('b', 2, 'b2b2b2b2') insert into tb values('b', 4, 'b4b4') insert into tb values('b', 5, 'b5b5b5b5b5') go select * , px = identity(int,1,1) into tmp from tb select m.name,m.val,m.memo from ( select t.* from tmp t where val = (select min(val) from tmp where name = t.name) ) m where px = (select min(px) from ( select t.* from tmp t where val = (select min(val) from tmp where name = t.name) ) n where n.name = m.name) drop table tb,tmp /* name val memo ---------- ----------- -------------------- a 1 a1--a的第一个值 b 1 b1--b的第一个值 (2 行受影响) */ --在sql server 2005中可以使用row_number函数,不需要使用临时表。 --创建表并插入数据: create table tb(name varchar(10),val int,memo varchar(20)) insert into tb values('a', 2, 'a2(a的第二个值)') insert into tb values('a', 1, 'a1--a的第一个值') insert into tb values('a', 1, 'a1--a的第一个值') insert into tb values('a', 3, 'a3:a的第三个值') insert into tb values('a', 3, 'a3:a的第三个值') insert into tb values('b', 1, 'b1--b的第一个值') insert into tb values('b', 3, 'b3:b的第三个值') insert into tb values('b', 2, 'b2b2b2b2') insert into tb values('b', 4, 'b4b4') insert into tb values('b', 5, 'b5b5b5b5b5') go select m.name,m.val,m.memo from ( select * , px = row_number() over(order by name , val) from tb ) m where px = (select min(px) from ( select * , px = row_number() over(order by name , val) from tb ) n where n.name = m.name) drop table tb /* name val memo ---------- ----------- -------------------- a 1 a1--a的第一个值 b 1 b1--b的第一个值 (2 行受影响) */
发表评论
-
mysql update更新带子查询的实现方式
2013-09-25 16:04 31534现在要做一下数据移植,需要更新相关的数据,需要在mysql中 ... -
Mysql日期时间函数总结
2013-08-22 13:36 1088一、MySQL 获得当前日 ... -
oracle树状数据结构start with...connect by prior
2012-12-11 17:04 1310今天改了个oracle树形结构展示的问题,帮人擦屁股啊。 之 ... -
oracle通过约束名查看表名的方法即异常
2012-12-03 14:33 1149首先咱不是dba啊,但老是操作oracle,多了解点还是 ... -
今天工作中用到的很有用的sql
2012-10-24 14:17 1100一 表备份与恢复语句 create table THB ... -
ORA-01407 cannot update 。。。 TO NULL
2012-10-24 13:51 2342我遇到下面的这种情 ... -
Oracle expdp/impdp导出导入命令总结(我的第100篇文章)
2012-09-05 11:03 1863我现在的情况是:在plsql中导入导出表慢,还老断开连接,想找 ... -
sql case when exists not exists in not in
2012-08-08 09:49 2655下面的附件中,关于case when 、 in 、not in ... -
PL/SQL 中调用存储过程
2012-07-13 18:02 13013今天写了个存储过程,为了删除测试数据用,平常老是pl/sql, ... -
linux上oracle误删除一个没有用的dbf表空间文件
2012-06-13 19:27 1961在Linux下面安装好Oracle只有,Linux 下面就会有 ... -
sql分组函数例子
2012-04-28 09:18 1239好久没写分组函数了,突然用到了,在这里总结一下,下次再写就一点 ... -
oracle通过游标方式删除所有以NO开头的session
2012-03-20 09:12 1434declare cursor ... -
Oracle中TO_DATE、TO_CHAR,Oracle函数大全
2011-11-28 14:41 1081Oracle中TO_DATE格式 TO_DATE格 ... -
Integer和BigDecimal转换
2011-11-02 14:14 40073(一) I ...
相关推荐
Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录
本文实例讲述了MySQL 多表关联一对多查询实现取最新一条数据的方法。分享给大家供大家参考,具体如下: MySQL 多表关联一对多查询取最新的一条数据 遇到的问题 多表关联一对多查询取最新的一条数据,数据出现重复 ...
2. **排序并选取第一条**:使用 `$sort` 阶段按 `createTime` 字段降序排列,然后用 `$limit` 阶段限制返回一条记录。 完整的聚合管道可能看起来像这样: ```javascript db.mt_resources_access_log20190122....
"查询前几条记录"这个主题聚焦于如何从数据库表中提取出最早添加或者最相关的若干条数据。这在很多场景下都非常有用,例如展示最新的新闻、加载用户最近的操作记录等。 在SQL语言中,有一个非常常见的方法来实现这...
Lookup + max 提取每个项目的最新一条记录 例如:查询每个商品的最新价格信息及其他信息 查询每个人的最后一次消费信息
oracel重复记录只保留一条,提供sql语句与存储过程2种处理方式
Delphi演示如何一次删除网格数据表dbgrid中的多条记录,小技巧不过挺实用,希望对大家的Delphi编程有所帮助。以下是实现一次删除多条记录的相关代码供参考: if DBGrid1.SelectedRows.Count >1 then s:= '真的要...
在Oracle数据库中,多行记录的合并通常是为了将相同字段的多行数据整合成一行,以便于数据分析或者简化展示。这种操作在报表制作、数据整理等场景中非常常见。本篇文章将详细介绍Oracle中实现多行记录合并的几种方法...
在SQL SERVRE中用以下语句可随机抽出多条记录:<BR>select top 13 * from table order by newid() <P><P>但在Access中却没有newid()这个函数,那能不能用一句语句随机抽出多条记录呢?我们的xuewuyuan版主说:当然...
在SQL查询中,有时我们需要处理重复的数据,特别是当表中存在多条内容几乎相同但有细微差异的记录时。这种情况通常发生在数据导入错误或者业务逻辑导致的冗余数据上。本文将详细介绍如何在SQL中以最简单的方式选取...
在C#编程中,当我们使用LINQ to SQL进行数据操作时,常常需要查询数据库中具有特定条件的最大值,比如获取一组记录中日期最大值的那一条。在本例中,我们将探讨如何在C#中使用LINQ to SQL查询相同记录下日期最大的一...
当数据库表中的某些列有重复的值时,我们可能需要仅选取其中的一条记录,例如,选择每组重复数据的第一条或者最后一条。题目中提到的SQL语句就是解决这类问题的一个示例。 首先,我们创建一个名为`TestData`的数据...
删除重复记录一般遵循的原则是:保留每组重复记录中的某一条记录(通常是第一条),其余的进行删除。 ##### 1. 单一字段的重复记录删除 对于单一字段(如`peopleId`)的重复记录删除,可以通过以下步骤实现: ```...
SQLServer 中将一个字段的多个记录值合并到一行显示的实现方法 SQL Server 是一种关系型数据库管理系统,具有强大的数据处理能力和存储能力。在实际应用中,我们经常需要将一个字段的多个记录值合并到一行显示,以...
mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...
2. 一对多关联:一个表的记录可以与另一个表的多个记录相关联。例如,部门表与员工表,一个部门可以有多名员工。 3. 多对多关联:两个表的记录都可以与其他表的多个记录相关联。例如,员工表与项目表,一个员工可以...
总结来说,通过`GROUP BY`,`GROUP_CONCAT`和`SUBSTRING_INDEX`的组合,我们可以有效地在MySQL中获取每个`userid`的最后一条记录。这种技巧在日志分析、活动追踪或其他需要获取最新状态的场景中非常实用。了解并掌握...