查询是否根据发布日期过滤订单?

问题描述 投票:0回答:1

我有这样的要求,我必须每月写一个查询来获取带有日期过滤器的内容,像这样。

  1. 我们可以针对一个订单使用多个发票(每个具有新过帐日期的发票)
  2. 我必须获取在第一个月中过帐的此类发票的记录,并且对于随后一个月使用新日期过滤器进行的查询,此类记录不应成为结果集的一部分。

例如

enter image description here

现在为2019年2月发布的相同订单提供另一张发票。

enter image description here

<

我正在使用以下查询来获取结果,但是它给出了1月的正确结果,但是对于2月也再次显示了相同的结果。在这方面请提供帮助。

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

sql sql-server tsql sql-server-2008 window-functions
1个回答
0
投票
我怀疑您想要:

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()来恢复每个发票的第一个posted_date。然后,外部查询将在每个组的第一条记录上进行过滤,其第一个posted_date与过滤器匹配。
© www.soinside.com 2019 - 2024. All rights reserved.