我有这个查询返回正确的数据,但我想过滤它。
SELECT TOP (100) PERCENT dbo.Reg_Master.id, dbo.Cart_Programs.cartid, dbo.Reg_Master.F_ID, dbo.BlockPeriod.profileid, dbo.Reg_Master.FirstName,
dbo.Reg_Master.LastName, dbo.BlockPeriod.startdate, dbo.Cart_Programs.blockid
FROM dbo.Cart_Programs LEFT OUTER JOIN
dbo.Reg_Master ON dbo.Cart_Programs.cartid = dbo.Reg_Master.cartid LEFT OUTER JOIN
dbo.BlockPeriod ON dbo.Cart_Programs.blockid = dbo.BlockPeriod.id
WHERE (dbo.BlockPeriod.profileid = xxx) AND (dbo.Reg_Master.F_ID = xxxx)
ORDER BY dbo.BlockPeriod.startdate
对于每个dbo.Reg_Master.id
,我想仅返回每个dbo.BlockPeriod.startdate
中最早的dbo.Reg_Master.id
(即今天或以后 - 换言之,忽略已经过去的日期),I似乎无法正确格式化。
答案 0 :(得分:1)
首先,TOP 100 Percent什么都不做,优化器会忽略它。
此外,由于您的WHERE
条件,您的左联接不起任何作用,因此我编辑了SQL以使用inner join
+ cross apply
与outer join
+ {{1 }}
如果我对每个outer apply
记录都理解正确,那么您最多需要Reg_Master
的1条记录,其中1条记录是最接近今天日期的记录。
如果是这样,那么您要找的是一个BlockPeriod
表格运算符与APPLY
结合使用,如下所示:
<强>已更新强>:
TOP (1)