我正在尝试从两个表中为每个服务选择一个行register_date。
但是,如果客户端具有更多具有相同register_date的行,则查询的输出包括多行。
我该如何解决这个问题?
我必须从两个表中进行选择。
我的代码是:
SELECT tServices.Client_id, tRegister.register_date,
tServices.type_service,
tServices.start_date, tServices.end_date
FROM tServices INNER JOIN tRegister
ON tRegister.Client_id = tServices.ClientId AND
tServices.type_service IN (3,2)
WHERE tRegister.register_date =
(SELECT top 1 tRegister2.register_date
FROM tRegister as tRegister2
WHERE tRegister2.ClientId = tServices.ClientId
ORDER BY tRegister2.register_date asc)
一个客户端的输出如下所示,但我想在输出中看到一行。
Client_Id register_date Type_Service Start_Date End_Date
1001 21-11-2018 2 17-01-2019 19-3-2019
1001 21-11-2018 2 17-12-2018 19-3-2019
答案 0 :(得分:0)
您可以为此使用apply
运算符:
select *
from tServices s
cross apply (
select top (1) * from tRegister r
where r.Client_id = s.ClientId
order by r.register_date
) ca;
请注意,apply
有2个版本:
cross
(相当于inner
联接); outer
,它作为left outer
联接。在上面的查询中,对于没有注册的客户端,您将看不到tServices
的任何行。如果仍然需要它们,请将cross
替换为outer
。