这只是一个想法。如果表格不对称,则需要改进逻辑。
declare @tableA table (id int)
declare @tableB table (dateTimeSlotId int , dateSlot date, timeSlot time)
insert @tableA values (1),(2),(3),(4),(5),(6),(7)
insert @tableB values
(1,'20170801', '00:00'),
(2,'20170802', '00:01'),
(3,'20170803', '00:02'),
(4,'20170804', '00:03'),
(5,'20170805', '00:04'),
(6,'20170806', '00:05'),
(7,'20170807', '00:06')
;with cte as(
SELECT ROW_NUMBER() over (order by id) rNumber, id, dateSlot, timeSlot
FROM @tableA a INNER JOIN
@tableB b
ON a.id = b.dateTimeSlotId)
SELECT id, dateSlot, timeSlot
FROM cte where rNumber <= (SELECT case when Count(1) >= 200 then Count(1) -2 else Count(1) end from @tableB)
你是什么意思隐藏? “最后两条记录”是什么意思? SQL中的表格表示*无序*集合。没有最后两行这样的东西。 –
因此,在tableB中这些少于200行的行中,tableA中的每行至少有一个匹配项? –
我可以考虑一个可能回答你的问题的查询,但你应该通过样本数据告诉我们你的意思。正如@gordon所说,你需要知道'tableA'中的哪一列定义了一个排序,以便你可以引用该表的最后2条记录。 –