Sql server T-SQL是否在一次查询中获取某个日期之后的所有记录以及之前的固定数字?

Sql server T-SQL是否在一次查询中获取某个日期之后的所有记录以及之前的固定数字?,sql-server,tsql,Sql Server,Tsql,样本数据表: eventDate eventText ------------------- ---------- 2018-05-01 12:00:00 Some event 2018-05-02 13:00:00 Some event 2018-05-03 11:00:00 Some event 2018-05-04 11:00:00 Some event 2018-05-05 15:00:00 Some event 2018-05-06 14:00:00 Some ev

样本数据表:

eventDate           eventText
------------------- ----------
2018-05-01 12:00:00 Some event
2018-05-02 13:00:00 Some event
2018-05-03 11:00:00 Some event
2018-05-04 11:00:00 Some event
2018-05-05 15:00:00 Some event
2018-05-06 14:00:00 Some event
2018-05-07 17:00:00 Some event
2018-05-08 16:00:00 Some event
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
我想检索某个日期之后的所有记录,但也要检索该日期之前的记录,直到达到某个最大记录数为止

例如,假设我要求提供2018年5月5日当天或之后的所有记录

SELECT * FROM myTable WHERE eventDate >= '2018-05-05' ORDER BY eventDate

eventDate           eventText
------------------- ----------
2018-05-05 15:00:00 Some event
2018-05-06 14:00:00 Some event
2018-05-07 17:00:00 Some event
2018-05-08 16:00:00 Some event
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
但现在我想在同一个查询结果中包括最多两条2018-05-05日期之前的记录。因此:

SELECT * FROM myTable WHERE eventDate >= '2018-05-05' ORDER BY eventDate -- pseudocode "AND OR eventDate < 2018-05-05 WITH MAXIMUM EXTRA RECORDS 2

eventDate           eventText
------------------- ----------
2018-05-03 11:00:00 Some event
2018-05-04 11:00:00 Some event
2018-05-05 15:00:00 Some event
2018-05-06 14:00:00 Some event
2018-05-07 17:00:00 Some event
2018-05-08 16:00:00 Some event
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
最大记录数是一个最大值,因此如果没有足够的条目,则可以,也不应是错误:

SELECT * FROM myTable WHERE eventDate >= '2018-05-02' ORDER BY eventDate -- pseudocode "AND OR eventDate < 2018-05-02 WITH MAXIMUM EXTRA RECORDS 10

eventDate           eventText
------------------- ----------
2018-05-01 12:00:00 Some event
2018-05-02 13:00:00 Some event
2018-05-03 11:00:00 Some event
2018-05-04 11:00:00 Some event
2018-05-05 15:00:00 Some event
2018-05-06 14:00:00 Some event
2018-05-07 17:00:00 Some event
2018-05-08 16:00:00 Some event
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
我还希望它是有效的,如果没有记录匹配的初始条件;在这种情况下,只返回两条记录:

SELECT * FROM myTable WHERE eventDate >= '2018-06-30' ORDER BY eventDate -- pseudocode "AND OR eventDate < 2018-06-30 WITH MAXIMUM EXTRA RECORDS 2

eventDate           eventText
------------------- ----------
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
我可以在一个查询中完成此操作吗

如果可能的话,您最好不使用存储过程或函数

用例是一个API,它将返回所有当前和未来记录的列表,包括当前时间之前的最新两条记录

SELECT t.*
FROM ((SELECT t.*
       FROM myTable t
       WHERE eventDate >= '2018-05-05'
       ORDER BY eventDate
      ) UNION ALL
      (SELECT TOP (2) t.*
       FROM myTable t
       WHERE eventDate < '2018-05-05'
       ORDER BY eventDate DESC
      )
     ) t
ORDER BY eventDate;

把支票给戈登

但它可以简单一点:

declare @dt datetime = '2018-06-30'

SELECT t.*
FROM (   SELECT t.*
         FROM myTable t
         WHERE eventDate >= @dt
       UNION ALL
       ( SELECT TOP(2) t.*
         FROM myTable t
         WHERE eventDate < @dt
         ORDER BY eventDate DESC
       )
     ) t
ORDER BY t.eventDate;