查询以根据发布日期过滤订单?
Query to filter orders according to posted date?
我有一个要求,我必须编写一个查询来获取像这样的按月日期过滤器的内容。
- 我们可以针对一个订单开具多张发票(每张发票都有新的发布日期)
- 我必须获取在第一个月发布的此类发票的记录,并且对于使用新日期过滤器的后续月份的查询,此类记录不应成为结果集的一部分。
例如
现在,同一订单的另一张发票已于 2019 年 2 月发布。
现在,当我 运行 查询 1 月份时,只有发布日期为 1 月份的记录应该出现,而当我 运行 查询 2 月份时,那么这个订单不应该是结果集的一部分,因为我们有已经决定它将成为上个月(1 月)结果集的一部分。
我正在使用以下查询来获取结果,但它给出了 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
我怀疑你想要:
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
内部查询使用 window min()
来恢复每张发票的第一个 posted_date
。然后外部查询过滤每组的第一条记录,其第一个 posted_date
匹配过滤器。
我有一个要求,我必须编写一个查询来获取像这样的按月日期过滤器的内容。
- 我们可以针对一个订单开具多张发票(每张发票都有新的发布日期)
- 我必须获取在第一个月发布的此类发票的记录,并且对于使用新日期过滤器的后续月份的查询,此类记录不应成为结果集的一部分。
例如
现在,同一订单的另一张发票已于 2019 年 2 月发布。
现在,当我 运行 查询 1 月份时,只有发布日期为 1 月份的记录应该出现,而当我 运行 查询 2 月份时,那么这个订单不应该是结果集的一部分,因为我们有已经决定它将成为上个月(1 月)结果集的一部分。
我正在使用以下查询来获取结果,但它给出了 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
我怀疑你想要:
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
内部查询使用 window min()
来恢复每张发票的第一个 posted_date
。然后外部查询过滤每组的第一条记录,其第一个 posted_date
匹配过滤器。