Sql server 在SQL Server中,如何获取日期大于某个设置日期或至少20行的所有行

Sql server 在SQL Server中,如何获取日期大于某个设置日期或至少20行的所有行,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在寻找一种方法来获取至少20行,而不管日期或日期大于设置日期的所有行,无论哪一行获取最多行 例如: SELECT * FROM table1 WHERE the_date >= '2014-11-01' ORDER BY the_date DESC 将给出我想要的,但如果返回的行数少于20行,则我希望在该日期之前继续执行,直到得到20行或直到不再有行为止,以先到者为准 我可以选择全部,然后按编程方式选择所需的代码,但我试图避免这种情况,因为在许多地方,这将是对实际代码的重大更改 这能

我正在寻找一种方法来获取至少20行,而不管日期或日期大于设置日期的所有行,无论哪一行获取最多行

例如:

SELECT *
FROM table1
WHERE the_date >= '2014-11-01'
ORDER BY the_date DESC
将给出我想要的,但如果返回的行数少于20行,则我希望在该日期之前继续执行,直到得到20行或直到不再有行为止,以先到者为准

我可以选择全部,然后按编程方式选择所需的代码,但我试图避免这种情况,因为在许多地方,这将是对实际代码的重大更改

这能做到吗

注意:我使用的是SQL Server 2008。

以下是一种方法:

select *
from
(
    select row_number() over (order by the_date desc) num, t.*
    from table1 t
) i
where i.the_date >= '2014-11-01'
or i.num < 21

非常奇怪的要求,但像这样的东西应该可以工作

DECLARE @Date date = '2014-11-01';

with MyResults as
(
    SELECT *, 1 as RowNum
    FROM table1
    WHERE (the_date >= @Date )    

    UNION ALL

    SELECT top 10 *, ROW_NUMBER() over(order by the_date desc)
    FROM table1
    order by the_date desc
)

Select *
from MyResults
where RowNum <= 20

正确答案几乎就在那里,但用户已将其删除,因此它再次出现:

SELECT *
FROM table1
WHERE the_date >= '2014-11-01'
union
SELECT top 20 *
FROM table1
ORDER BY the_date desc
删除的答案已被全部删除


这个答案存在重复日期的问题,但对于我掌握的数据,这不是问题

您可以选择前20行,然后将其与基于日期选择的查询合并。尝试过-我需要一个示例-无法使其工作是的,这很奇怪,但这正是我所需要的如果你没有重复日期的问题,那就把工会全部放回去。您在此处发布的代码将删除重复的代码。您还应该添加一个外部选择,以明确order by位于您的顶部查询中。这并不能解释发生了什么。你了解工会和全体工会的区别吗。当包含所有查询时,将不会排除重复项,这类似于独特查询。您声明没有重复的日期,因此使用all将提高性能。但如果查询对您有效,这是最重要的部分。它不起作用,因为它获取了20多行数据,而它本不应该获取这些数据,但Jace的回答涵盖了所有这些数据——甚至涉及重复的日期——谢谢