sql中如何取重复的数据取时间最近的一条?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中如何取重复的数据取时间最近的一条?相关的知识,希望对你有一定的参考价值。

上传的图被百度吃了。
有字段 CZYH(住院号),IZRBQ(编码),CZRBQ(编码名称),DSJ(时间)。
现在要获取CZYH(有重复,因为病人转不同的科室)病人住院号最新的转科编码和名称。不管之前CZYH转了几次科室,现在只要取最新的转入的科室。

既然数据都重复,就时间不同,那就取max(时间)就行了吧
select 重复数据的列名1,重复数据的列名2,....,max(时间列) from table group by 重复数据的列名1,重复数据的列名2,....追问

我想在后面加个重复了的czyh 但是时间没有重复的 czyh 验证下,怎么加,我加了报错误。

追答

select * from table a inner join (select czyh,max(dsj ) from table group by czyh) b on a.czyh =b.czyh and a.dsj = b.dsj

参考技术A select * from 表A as a inner join
(
select czyh,max(DSJ) as maxdsj From 表A Group by czyh
) as b
on a.czyh=b.czyh and dsj=b.dsj

如果你有自增长字段,用自增长字段来max一样的效果
参考技术B 有时间列就取最大时间列
有自增的id就去最大id

如果是想返回一个记录集,并且有时间列的话可以这么做
select 重复列,时间列,其余列
inner join (select 重复列,max(时间列) as 时间列 from 表 group by 重复列) AS T2
on t1.重复列=t2.重复列 and t1.时间列 =t2.时间列
from 表 AS T1
参考技术C 比如你数据库中有一个表tab(姓名name,登陆时间logTime)姓名有重复的名叫A

select top 1 * from tab where name='a' order by logTime desc
参考技术D select * from table t1 ,(select top(dsj) as dsj,czyh from table group by czyh) as t2
where t1.dsj=t2.dsj and t1.czyh =t2.czyh

oracle 取重复数据中一条

表结构id(number)类, time(date)类,可用to_char(time,'yyyy-mm-dd')表示
id不唯一,有重复,time唯一。要找出每个id最早出现的那几行数据(几个id就有几行)
select * from table group by id having count(id)>1 order by to_char(time,'yyyy-mm-dd');这样对么?不对的话应该如何写?

操作步骤:

    先按要求,针对某唯一字段,对重复数据进行分组,取max或min,结果存储到临时表

    关联原表与上一步的临时表,取到相应的数据

如:

表tt结构如下:

create table tt(
    id number,
    time date,
    others ....   其它字段
);

,  id不唯一,有重复,time唯一。

要找出每个id最早出现的那几行数据,有几个id就有几行输出。

分析:出现最早的数据,即time最小的数据,用min(time)来分组

SQL语句如下:

select t2.* from
   ( select id, min(time) tm from tt group by id ) t1, tt t2
where t1.id=t2.id and t1.tm=t2.time ;

 说明:子语句( select id, min(time) tm from tt group by id ) 就是得到每个id的最小时间列表

参考技术A select * from table_name a where a.rowid <=(select min(rowid) from table_name b where a.id=b.id) order by id asc;
这个语句是查询出id相同的记录,并按照id递增排序,试试看,如果有什么错误回复我。追问

和表b有什么关系?这个语句我见过。我不用这样,我的目的只是重复的中取一条。

追答

表b还是表a只是别名,用来区分的。这个查询是查询的同一个表。

本回答被提问者采纳

以上是关于sql中如何取重复的数据取时间最近的一条?的主要内容,如果未能解决你的问题,请参考以下文章

sql中如何取重复的数据中时间最近的一条_

mysql 查询重复数据取其中一条

多表查询结果出现重复记录,根据条件只取其中的一条记录的sql语句

sql server 2008中如何取某字段最大值所在的一条数据(多个字段)

SQL 查询一表所有数据 有重复的按时间取第一条

oracle 取重复数据中一条