inner join 的去重复问题

huangma1616 2009-08-16 01:04:28
现在有两个表。一张用户表有一条数据,一张检查记录表,引用到了用户表的user_id,这个表有两条记录, 我连接查询时,出来了两条数据,我要得到是这个用户检查的最后一条记录。。

一.

t_chk_user

user_id name ....

1 a
2 b

二.

t_chk_record

check_id user_id check_date ....

1 1 2009-09-02
2 1 2009-09-03
3 2 2009-09-02


现在我想得到的是总共两条记录去掉同一个用户的早期的检查记录,说哈思路。。

...全文
299 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
haipeng1986 2009-08-16
  • 打赏
  • 举报
回复
同意楼上
黄_瓜 2009-08-16
  • 打赏
  • 举报
回复
create table tb(check_id int,   [user_id] int,     check_date datetime)
insert into tb select 1 , 1, '2009-09-02'
union all select 2, 1, '2009-09-03'
union all select 3, 2 , '2009-09-02'

--如果同一个user_id 对应日期唯一
select * from tb a where
not exists (
select 1 from tb where [user_id]=a.[user_id] and check_date<a.check_date)
--如果check_id

select * from tb a where
not exists (
select 1 from tb where [user_id]=a.[user_id] and check_id<a.check_id)
/*
check_id user_id check_date
----------- ----------- -----------------------
1 1 2009-09-02 00:00:00.000
3 2 2009-09-02 00:00:00.000

(2 行受影响)
*/
drop table tb
--最后建议字段不要使用user_id,因为他是sql关键字
黄_瓜 2009-08-16
  • 打赏
  • 举报
回复
随便去还是保留日期大的?
huangma1616 2009-08-16
  • 打赏
  • 举报
回复
distinct 不行的。。
xiaodru 2009-08-16
  • 打赏
  • 举报
回复
在sql语句那里前面加上distinct就OK拉
xiaodru 2009-08-16
  • 打赏
  • 举报
回复
distinct
BernardSun 2009-08-16
  • 打赏
  • 举报
回复

select * from @t_chk_record a,@t_chk_user b
where time=(select max(time) from @t_chk_record where user_id=a.user_id)
and a.user_id=b.user_id
IHandler 2009-08-16
  • 打赏
  • 举报
回复
SELECT TOP 1 ..... ORDER BY check_date desc
huangma1616 2009-08-16
  • 打赏
  • 举报
回复
我有很多列呢。每个列都要用,有点不好吧。有没有好一点的方面
zhanglingdll_39 2009-08-16
  • 打赏
  • 举报
回复
可以使用聚合函数max(列名)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧