繁体   English   中英

在 oracle sql 中查询某个日期之前的产品订单是什么?

[英]what is the query in oracle sql to find product orders before a certain date?

我如何找到所有在 2017 年之前下订单的客户。列表必须包含客户 ID、客户名称,并按他们在 desc 中的 ID 值排序

CREATE TABLE employees
      (
        employee_id NUMBER 
                    GENERATED BY DEFAULT AS IDENTITY START WITH 108 
                    PRIMARY KEY,
        first_name VARCHAR( 255 ) NOT NULL,
        last_name  VARCHAR( 255 ) NOT NULL,
        email      VARCHAR( 255 ) NOT NULL,
        phone      VARCHAR( 50 ) NOT NULL ,
        hire_date  DATE NOT NULL          ,
        manager_id NUMBER( 12, 0 )        , -- fk
        job_title  VARCHAR( 255 ) NOT NULL,
        CONSTRAINT fk_employees_manager 
            FOREIGN KEY( manager_id )
            REFERENCES employees( employee_id )
            ON DELETE CASCADE
      );
    -- product category
    CREATE TABLE product_categories
      (
        category_id NUMBER 
                    GENERATED BY DEFAULT AS IDENTITY START WITH 6 
                    PRIMARY KEY,
        category_name VARCHAR2( 255 ) NOT NULL
      );


    -- products table
    CREATE TABLE products
      (
        product_id NUMBER 
                   GENERATED BY DEFAULT AS IDENTITY START WITH 289 
                   PRIMARY KEY,
        product_name  VARCHAR2( 255 ) NOT NULL,
        description   VARCHAR2( 2000 )        ,
        standard_cost NUMBER( 9, 2 )          ,
        list_price    NUMBER( 9, 2 )          ,
        category_id   NUMBER NOT NULL         ,
        CONSTRAINT fk_products_categories 
          FOREIGN KEY( category_id )
          REFERENCES product_categories( category_id ) 
          ON DELETE CASCADE




     CREATE TABLE customers
          (
            customer_id NUMBER 
                        GENERATED BY DEFAULT AS IDENTITY START WITH 320 
                        PRIMARY KEY,
            name         VARCHAR2( 255 ) NOT NULL,
            address      VARCHAR2( 255 )         ,
            website      VARCHAR2( 255 )         ,
            credit_limit NUMBER( 8, 2 )
          );



        CREATE TABLE orders
          (
            order_id NUMBER 
                     GENERATED BY DEFAULT AS IDENTITY START WITH 106 
                     PRIMARY KEY,
            customer_id NUMBER( 6, 0 ) NOT NULL, -- fk
            status      VARCHAR( 20 ) NOT NULL ,
            salesman_id NUMBER( 6, 0 )         , -- fk
            order_date  DATE NOT NULL          ,
            CONSTRAINT fk_orders_customers 
              FOREIGN KEY( customer_id )
              REFERENCES customers( customer_id )
              ON DELETE CASCADE,
            CONSTRAINT fk_orders_employees 
              FOREIGN KEY( salesman_id )
              REFERENCES employees( employee_id ) 
              ON DELETE SET NULL
          );


        CREATE TABLE order_items
          (
            order_id   NUMBER( 12, 0 )                                , -- fk
            item_id    NUMBER( 12, 0 )                                ,
            product_id NUMBER( 12, 0 ) NOT NULL                       , -- fk
            quantity   NUMBER( 8, 2 ) NOT NULL                        ,
            unit_price NUMBER( 8, 2 ) NOT NULL                        ,
            CONSTRAINT pk_order_items 
              PRIMARY KEY( order_id, item_id ),
            CONSTRAINT fk_order_items_products 
              FOREIGN KEY( product_id )
              REFERENCES products( product_id ) 
              ON DELETE CASCADE,
            CONSTRAINT fk_order_items_orders 
              FOREIGN KEY( order_id )
              REFERENCES orders( order_id ) 
              ON DELETE CASCADE
          );

您可以使用exists和相关子查询来过滤在 2017 年之前订购的客户。我们可以通过仅查看orders表来获取该信息:

select c.customer_id, c.name
from customers c
where exists (
    select 1 
    from orders o 
    where o.customer_id = c.customer_id and o.order_date < date '2017-01-01'
)
order by c.customer_id desc

您可以使用以下查询。

    Select customers.customer_id, customers.name
    from customers join orders
    on customers.customer_id = orders.customer_id
    where year(orders.order_date) < 2017
    order by customers.customer_id desc;

为了达到预期的结果,我们需要 Orders 和 Customers 表。 尝试这个

SELECT C.CUSTOMER_ID, C.NAME
FROM CUSTOMERS C, ORDERS O
WHERE O.CUSTOMER_ID = C.CUSTOMER_ID AND O.ORDER_DATE < '01-JAN-2017'
ORDER BY C.CUSTOMER_ID DESC;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM