基本上我有2张桌子。让我们说A和B.
A包含id(PK),pin,name,address
等列id(PK) pin name address
1 aaa-111-aaa AAA ------
2 bbb-222-bbb BBB ------
3 ccc-333-ccc CCC --------
B包含appName,apprequestTime,appAccectTime,id(FK)等列。
appName apprequestTime appAccectTime id(FK).
LLL 2012-4-01 2012-4-01 1
NNN 2012-4-08 2012-5-01 2
QQQ 2012-4-05 2012-4-01 1
MMM 2012-4-02 2012-4-02 2
PPP 2012-5-01 2012-5-01 1
B表中可以有多个id行,因为它是外键。
现在,问题是我正在尝试获取某个apprequestTime的一个引脚的所有记录。
我正在尝试内连接,但由于表B中的id,它显示了引脚。
pin apprequestTime
aaa-111-aaa 2012-4-01
aaa-111-aaa 2012-4-05
bbb-222-bbb 2012-4-08
bbb-222-bbb 2012-4-02
但我期待的结果应该是:
pin apprequestTime
aaa-111-aaa 2012-4-01
2012-4-05
bbb-222-bbb 2012-4-08
2012-4-02
任何人都可以提供帮助:)
答案 0 :(得分:4)
在SQL Server 2005+中,您可以使用row_number()
来处理此类请求:
;with cte as
(
select a.pin, b.apprequestTime,
row_number() over(partition by a.pin
order by b.apprequestTime) rn
from tablea a
inner join tableb b
on a.id = b.id
)
select case when rn = 1 then pin else '' end pin,
apprequestTime
from cte;
或没有CTE:
select case when rn = 1 then pin else '' end pin,
apprequestTime
from
(
select a.pin, b.apprequestTime,
row_number() over(partition by a.pin
order by b.apprequestTime) rn
from tablea a
inner join tableb b
on a.id = b.id
) t1