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

Posted

技术标签:

【中文标题】查询根据发布日期过滤订单?【英文标题】:Query to filter orders according to posted date? 【发布时间】:2020-02-18 12:51:48 【问题描述】:

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

    我们可以针对一个订单开多张发票(每张发票都有新的过帐日期) 我必须获取在第一个月发布的此类发票的记录,并且对于使用新日期过滤器的下个月查询,此类记录不应成为结果集的一部分。

举例

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

现在,当我为 1 月运行此查询时,应仅显示 1 月发布日期的记录,当我为 2 月运行此查询时,此订单不应成为结果集的一部分,因为我们已经决定它将成为上个月的一部分(一月)结果集。

我正在使用以下查询来获取结果,但它给出了 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

【问题讨论】:

【参考方案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() 恢复每张发票的第一个posted_date。然后外部查询过滤每个组的第一条记录,其第一个 posted_date 与过滤器匹配。

【讨论】:

谢谢,这正是我想要的

以上是关于查询根据发布日期过滤订单?的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce REST API - 按修改日期过滤订单

无法根据 Informix 中的日期过滤器过滤记录

在 mongodb python 上根据日期上传和过滤年龄

日期过滤器的PHP查询[关闭]

根据订单中的值过滤列表?

11 使用子查询