跨表查询的SQL语句

hnymx2005 2008-03-01 03:15:55
我有二个表
表一
客户姓名 省份
aa    江苏
dd    浙江
hh    江西
ff    广西
jj    山东
tt    湖北

表二
客户姓名 交款日期
aa 08-3-5
aa 08-3-13
ff 08-3-8
rr 08-4-5
tt 08-4-7
jj 08-2-4
jj 08-3-5
jj 08-6-7
ff 08-4-6
tt 08-5-6

如何查询第一次交款日期在3月份的客户姓名、省份、第一次交款日期,结果应该如下:
客户姓名 省份  第一次交款日期
aa    江苏  2008-3-5
ff    广西  2008-3-8



...全文
403 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2008-03-02
  • 打赏
  • 举报
回复
select a.客户姓名,a.省份,tmp.rq as 第一次交款日期
from 表一 a inner join
(select 客户姓名,min(交款日期) rq from 表二 group by 客户姓名 having month(min(交款日期))=3) as tmp
on tmp.客户姓名=a.客户姓名
cxmcxm 2008-03-02
  • 打赏
  • 举报
回复
select  a.客户姓名,b.省份,a.交款日期 第一次交款日期
from 表二 a,表一 b
where a.客户姓名=b.客户姓名
and not exists(select * from 表二 where 客户姓名=a.客户姓名 and 交款日期<a.交款日期)
cxmcxm 2008-03-02
  • 打赏
  • 举报
回复
select a.客户姓名,b.省份,a.交款日期 第一次交款日期
from 表二 a,表一 b
where a.客户姓名=b.客户姓名
and not exists(select * from 表二 where 客户姓名=a.客户姓名 and 交款日期<a.交款日期)
wlzd3636 2008-03-02
  • 打赏
  • 举报
回复
又见乌龟牛人? 羡慕
wlzd3636 2008-03-02
  • 打赏
  • 举报
回复

declare @t table(客户姓名 varchar(50),省份 varchar(10))
declare @t1 table(客户姓名 varchar(50),交款日期 datetime)

insert into @t values('aa','江苏')
insert into @t values('dd','浙江')
insert into @t values('hh','江西')
insert into @t values('ff','广西')
insert into @t values('jj','山东')
insert into @t values('tt','湖北')
insert into @t1 values('aa','08-3-5')
insert into @t1 values('aa','08-3-13')
insert into @t1 values('ff','08-3-8')
insert into @t1 values('rr','08-4-5')
insert into @t1 values('tt','08-4-7')
insert into @t1 values('jj','08-2-4')
insert into @t1 values('jj','08-3-5')
insert into @t1 values('jj','08-6-7')
insert into @t1 values('ff','08-4-6')
insert into @t1 values('tt','08-5-6')

select a.客户姓名,a.省份,第一次= (select min(b.交款日期) as 日期 from @t1 b where datepart(mm,b.交款日期)=3 and b.客户姓名=a.客户姓名) from @t a
aa 江苏 2008-03-05 00:00:00.000
dd 浙江 NULL
hh 江西 NULL
ff 广西 2008-03-08 00:00:00.000
jj 山东 2008-03-05 00:00:00.000
tt 湖北 NULL



----select a.客户姓名,a.省份,第一次= (select min(b.交款日期) as 日期 from @t1 b where datepart(mm,b.交款日期)=3 and b.客户姓名=a.客户姓名) from @t a

select b. 客户姓名,省份=(select a.省份 from @t a where b.客户姓名=a.客户姓名) ,min(b.交款日期) as 日期 from @t1 b where datepart(mm,b.交款日期)=3 group by b.客户姓名

aa 江苏 2008-03-05 00:00:00.000
ff 广西 2008-03-08 00:00:00.000
jj 山东 2008-03-05 00:00:00.000


2种效果 刚才那个多了个)


dawugui 2008-03-02
  • 打赏
  • 举报
回复
create table 表一(客户姓名 varchar(10),省份 varchar(10))
insert into 表一 values('aa', '江苏')
insert into 表一 values('dd', '浙江')
insert into 表一 values('hh', '江西')
insert into 表一 values('ff', '广西')
insert into 表一 values('jj', '山东')
insert into 表一 values('tt', '湖北')
create table 表二(客户姓名 varchar(10),交款日期 datetime)
insert into 表二 values('aa', '2008-3-5 ')
insert into 表二 values('aa', '2008-3-13')
insert into 表二 values('ff', '2008-3-8')
insert into 表二 values('rr', '2008-4-5')
insert into 表二 values('tt', '2008-4-7')
insert into 表二 values('jj', '2008-2-4')
insert into 表二 values('jj', '2008-3-5')
insert into 表二 values('jj', '2008-6-7')
insert into 表二 values('ff', '2008-4-6')
insert into 表二 values('tt', '2008-5-6')
go

select m.客户姓名,m.省份,n.交款日期 from 表一 m,
(select 客户姓名,min(交款日期) 交款日期 from 表二 where convert(varchar(7),交款日期,120) = '2008-03' group by 客户姓名) n
where m.客户姓名 = n.客户姓名

drop table 表一,表二

/*
客户姓名 省份 交款日期
---------- ---------- ------------------------------------------------------
aa 江苏 2008-03-05 00:00:00.000
ff 广西 2008-03-08 00:00:00.000
jj 山东 2008-03-05 00:00:00.000
(所影响的行数为 3 行)
*/
dawugui 2008-03-02
  • 打赏
  • 举报
回复
--上面漏写表别名.
select m.客户姓名,m.省份,n.交款日期 from 表一 m
left join
(select 客户姓名,min(交款日期) 交款日期 from 表二 where convert(varchar(7),交款日期,120) = '2008-03' group by 客户姓名) n
on m.客户姓名 = n.客户姓名
dawugui 2008-03-02
  • 打赏
  • 举报
回复
select m.客户姓名,m.省份,n.交款日期 from 表一 
left join
(select 客户姓名,min(交款日期) 交款日期 from 表二 where convert(varchar(7),交款日期,120) = '2008-03' group by 客户姓名) n
on m.客户姓名 = n.客户姓名
wlzd3636 2008-03-02
  • 打赏
  • 举报
回复
还是我的最简洁 最优化 嘎嘎
wlzd3636 2008-03-02
  • 打赏
  • 举报
回复


select a.客户姓名,a.省份,第一次= (select min(b.交款日期) as 日期 from table2 b where datepart(mm,b.交款日期)=3 and b.客户姓名=a.客户姓名)) from table1 a
HU0L0NG 2008-03-02
  • 打赏
  • 举报
回复
学习roy_88 的

发表于:2008-03-01 15:19:482楼 得分:0
select
t1.客户姓名,
t1.省份,
min(第一次交款日期)第一次交款日期
from
t1
join=t2.客户姓名
t2 on t1.客户姓名
group by t1.客户姓名,t1.省份
having convert(varchar(6),min(第一次交款日期),112)='200803'
cxmcxm 2008-03-01
  • 打赏
  • 举报
回复
select  a.客户姓名,b.省份,a.交款日期 第一次交款日期
from 表二 a,表一 b
where a.客户姓名=b.客户姓名
and not exists(select * from 表二 where 客户姓名=a.客户姓名 and 交款日期<a.交款日期)
siwolf1129 2008-03-01
  • 打赏
  • 举报
回复
3楼正解
hnymx2005 2008-03-01
  • 打赏
  • 举报
回复
一楼的如何体现3月份
liangCK 2008-03-01
  • 打赏
  • 举报
回复
我上面漏了个group by
liangCK 2008-03-01
  • 打赏
  • 举报
回复
select a.客户姓名,a.省份,第一次交款日期=min(交款日期)
from 表一 a
inner join 表二 b
on a.客户姓名=b.客户姓名
where datepart(month,b.交款日期)=3
中国风 2008-03-01
  • 打赏
  • 举报
回复
select
t1.客户姓名,
t1.省份,
min(第一次交款日期)第一次交款日期
from
t1
join=t2.客户姓名
t2 on t1.客户姓名
group by t1.客户姓名,t1.省份
having convert(varchar(6),min(第一次交款日期),112)='200803'
samson_www 2008-03-01
  • 打赏
  • 举报
回复
select a.客户姓名,a.省份,b.col as 交款日期 from 表一 a,(select min(交款日期) as col,客户姓名 from 表二 group by 客户姓名) b where a.客户姓名=b.客户姓名

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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