Sql 是否根据过帐日期查询以筛选订单?

Sql 是否根据过帐日期查询以筛选订单?,sql,sql-server,tsql,sql-server-2008,window-functions,Sql,Sql Server,Tsql,Sql Server 2008,Window Functions,我有一个要求,我必须写一个查询,以获得像这样的日期过滤器 我们可以根据订单提供多张发票,每张发票都有新的过账日期 我必须获得在第一个月过账的此类发票的记录,并在下一个月使用新的日期过滤器进行查询,此类记录不应成为resultset的一部分。 比如说 现在,2019年2月发布了同一订单的另一张发票 现在,当我为1月份运行此查询时,应该只显示带有1月份过账日期的记录,而当我为2月份运行此查询时,则此订单不应该是resultset的一部分,因为我们已经确定它将是上个月1月份resultset的一部分

我有一个要求,我必须写一个查询,以获得像这样的日期过滤器

我们可以根据订单提供多张发票,每张发票都有新的过账日期 我必须获得在第一个月过账的此类发票的记录,并在下一个月使用新的日期过滤器进行查询,此类记录不应成为resultset的一部分。 比如说

现在,2019年2月发布了同一订单的另一张发票

现在,当我为1月份运行此查询时,应该只显示带有1月份过账日期的记录,而当我为2月份运行此查询时,则此订单不应该是resultset的一部分,因为我们已经确定它将是上个月1月份resultset的一部分

我使用下面的查询来获得结果,但它给出了一月的正确结果,但它再次显示了二月的相同结果。请在这方面给予帮助

DECLARE @From DATETIME
DECLARE @To DATETIME

SET @From = '2018-01-01 00:00:00.000'
SET @To = '2018-01-30 23:59:59.997'

SELECT *
FROM (
    SELECT s.OrderNumber
        ,i.InvoiceNumber
        ,i.new_PostedDate
        ,i.new_CanceledDate
        ,s.new_OrderStatus
        ,i.StatusCode
        ,s.ModifiedOn
        ,ROW_NUMBER() OVER (
            PARTITION BY s.OrderNumber ORDER BY i.new_PostedDate ASC
            ) AS RowNumber
    FROM SalesOrders s
    INNER JOIN Invoices i ON s.SalesOrderId = i.SalesOrderId
    LEFT JOIN StatusReasonsLookup sl ON i.StatusCode = sl.Id
        AND (i.new_PostedDate >= @From)
        AND (i.new_PostedDate <= @To)
        --Where sl.StatusCodeName  <> 'Canceled' 
    ) tblInvoice
WHERE RowNumber = 1

我怀疑你想要:

select *
from (
    select 
        s.*, 
        min(posted_date) over(partition by order_number) first_posted_date
    from salesorders s
) s
where 
    s.posted_date = s.first_posted_date
    s.first_posted_date between @from and @to

内部查询使用窗口min来恢复每个发票的第一个过账日期。然后外部查询过滤每个组的第一条记录,其第一次发布的日期与过滤器匹配。

谢谢,这正是我想要的