Return 个不同表中给定日期之后的列

Return columns from different tables that are after a given date

我需要编写一个查询,其中 returns 个产品订单在 2018 年 4 月期间打开并且仍然打开,并且 returns 个产品订单在 2018 年 4 月期间打开并且不再打开打开。

这些行需要在结果中包含下订单的客户姓名、订单 ID 和订单填写日期。

这是table信息

    CREATE TABLE dbo.ProductOrders
    (
        POID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY ,
        ProductId INT NOT NULL
            CONSTRAINT FK_ProductOrders_ProductId_ref_Products_ProductId
            FOREIGN KEY REFERENCES dbo.Products ( ProductId ) ,
        CustomerId INT NOT NULL ,
        OrderedQuantity INT ,
        Filled BIT NOT NULL
            CONSTRAINT DF_ProductOrders_Filled
                DEFAULT ( 0 ) ,
        DateOrdered DATETIME
            CONSTRAINT DF_ProductOrders_DateOrdered
                DEFAULT ( GETDATE()) ,
        DateFilled DATETIME
            CONSTRAINT DF_ProductOrders_DateFilled
                DEFAULT ( GETDATE())
    );

INSERT dbo.ProductOrders ( ProductId ,
                           CustomerId ,
                           OrderedQuantity ,
                           Filled ,
                           DateOrdered ,
                           DateFilled )
VALUES ( 2, 1, 1000, 0, '4/16/18 8:09:13', NULL ) ,
       ( 2, 1, 500, 1, '3/27/18 17:00:21', '6/24/18 13:29:01' ) ,
       ( 3, 3, 2000, 1, '12/01/04 13:28:58', '2/19/05 19:41:42' ) ,
       ( 1, 1, 632, 0, '5/23/18 4:25:52', NULL ) ,
       ( 4, 4, 901, 0, '3/30/18 21:30:28', NULL );


    CREATE TABLE dbo.Customers
    (
        CustomerId INT NOT NULL IDENTITY(1, 1) PRIMARY KEY ,
        CustomerName NVARCHAR(100) ,
        Active BIT NOT NULL
            CONSTRAINT DF_Customers_Active
                DEFAULT ( 1 )
    );

INSERT dbo.Customers ( CustomerName ,
                       Active )
VALUES ( 'Bikes R'' Us', 1 ) ,
       ( 'Industrial Giant', 1 ) ,
       ( 'Widget-Works', 0 ) ,
       ( 'Custom Hangers', 1 );

这是我最好的尝试,我知道这不是正确的语法,但我不确定我是否需要将它们与 tables 连接起来才能完成这项工作,或者我将如何进行关于选择从 2018 年 4 月开始并且在该日期之后打开或关闭的订单。

select CustomerName, POID,  DataFilled, 
From ProductOrders, Customers
Where DateOrdered is >= April 2018

我想你想要加入并过滤:

select c.customername, po.poid, po.dateordered, po.datefilled
from productorders po
inner join customers c on c.customerid = po.customerid
where 
    po.dateordered >= '20180401' 
    and po.dateordered < '20180501' 
    and po.datefilled < getdate()

这为您提供了 2018 年 4 月订购的订单,这些订单目前已不再开放。要获取仍然未结的订单,您可以将最后一个条件更改为 po.datefilled is null