按唯一ID和将来最早的日期过滤SQL查询

时间:2012-01-27 02:48:27

标签: sql sql-server

我有这个查询返回正确的数据,但我想过滤它。

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似乎无法正确格式化。

1 个答案:

答案 0 :(得分:1)

首先,TOP 100 Percent什么都不做,优化器会忽略它。 此外,由于您的WHERE条件,您的左联接不起任何作用,因此我编辑了SQL以使用inner join + cross applyouter join + {{1 }}

如果我对每个outer apply记录都理解正确,那么您最多需要Reg_Master的1条记录,其中1条记录是最接近今天日期的记录。

如果是这样,那么您要找的是一个BlockPeriod表格运算符与APPLY结合使用,如下所示:

<强>已更新

TOP (1)