关于多条id相同,只取一条记录得sql语句
2010-09-03 23:28
561 查看
sqlserver 2005 中
CREATE TABLE [dbo].[mian](
[id] [int] NOT NULL,
[name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[age] [int] NULL,
[state] [bit] NOT NULL
)
--执行2遍,则共8条记录
insert into mian values(1,'st',27,1)
insert into mian values(1,'tj',28,0)
insert into mian values(2,'2st',45,0)
insert into mian values(2,'2tj',88,0)
div>
id name age state
1 st 27 1
1 tj 28 0
2 2st 45 0
2 2tj 88 0
1 st 27 1
1 tj 28 0
2 2st 45 0
2 2tj 88 0
执行id有相同,执行有state有1的就取出1的,没有的就取出0中的任何一条
select * from (select * , row_number() over(partition by id order by state desc) as sequence
from mian ) a where sequence =1
--where 前要有个表名,^-^
oracle中要如下修改:
select * from (select t.* , row_number() over(partition by t.id order by t.state desc) as sequence
from mian t ) a where sequence =1
oracle 中要加个别名t,与sqlserver2005中不同,不知道为什么。
CREATE TABLE [dbo].[mian](
[id] [int] NOT NULL,
[name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[age] [int] NULL,
[state] [bit] NOT NULL
)
--执行2遍,则共8条记录
insert into mian values(1,'st',27,1)
insert into mian values(1,'tj',28,0)
insert into mian values(2,'2st',45,0)
insert into mian values(2,'2tj',88,0)
div>
id name age state
1 st 27 1
1 tj 28 0
2 2st 45 0
2 2tj 88 0
1 st 27 1
1 tj 28 0
2 2st 45 0
2 2tj 88 0
执行id有相同,执行有state有1的就取出1的,没有的就取出0中的任何一条
select * from (select * , row_number() over(partition by id order by state desc) as sequence
from mian ) a where sequence =1
--where 前要有个表名,^-^
oracle中要如下修改:
select * from (select t.* , row_number() over(partition by t.id order by t.state desc) as sequence
from mian t ) a where sequence =1
oracle 中要加个别名t,与sqlserver2005中不同,不知道为什么。
相关文章推荐
- 关于多条id相同,只取其中一条记录的sql语句
- 关于仅显示相同记录中一条的SQL语句
- 用一条sql语句删除表中所相同记录
- 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
- 用一条sql语句删除表中所相同的记录
- 关于SQL语句查询最近联系人聊天记录(即最近一条消息)
- SQL 取出UserID相同记录中的一条,并且取的是ID最大的。
- 一条SQL语句,关于字符分割关联多条记录的问题
- 关于mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句理解
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher
- SQL把ID相同的记录合并成同一条记录
- 写出一条Sql语句,取出表A中的第31条到第40条记录。表A以自动增长的ID作为主键。(注意:ID可能不是连续的)
- [常见面试题]一条Sql语句:取出表A中第31到第40记录,ID可能不是连续的
- Sql语句 表中相同的记录(某个字段)只显示一条,按照时间排序显示最大或最小
- 如何用一条sql语句删除表中所相同的记录?
- 用一条sql语句删除表中所相同记录
- 用一条sql语句删除表中所相同记录
- 关于使用一条SQL语句 找出同时符合多个tag条件的记录集合算法
- 如何写出一条SQL语句:取出表A中第31~40条记录(SQLServer,以自动增长的ID作为主键
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher