基本上我有 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 的一个 pin 的所有记录。
我正在尝试内部连接,但由于表 B 中的 ID,它显示了 pin。
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
谁能帮忙:)
最佳答案
在 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
关于sql-server - 显示来自 Join 查询的不同数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13050536/