【问题标题】:Sql - get previous order which uses the itemSql - 获取使用该项目的先前订单
【发布时间】:2015-02-11 05:36:51
【问题描述】:

我有下表

order_item

   order_id|   item_id
    --------------------------------
    213    |    3
    215    |    3
    244    |    2
    299    |    3
    400    |    3

用户输入: item_idorder_id 例如:3 & 299 在上面的例子中。

要求:我需要立即找到最后一个售出 item_id 3 的商品的订单。 (在这种情况下为 215 order_id)

因为 input(order_id , item_id) 是 (299 , 3)。从表中,最近已售出商品 3 的订单是 order_id 215,因此,我需要将 (215, 3) 行返回给用户。

我尝试了以下,我知道这是错误的,因为我不知道如何获取上述信息。

select (select oi.item_id from order_item oi where oi.order_id < order_id and rownum =1) 
from order_item where order_id = 299 and item_id = 3  

【问题讨论】:

  • 请说明您的要求。不知道你想要什么。
  • @Tarik 编辑了这个问题。请看一看。

标签: sql oracle10g


【解决方案1】:

应该这样做:

select max(order_id) from order_item where  order_id <299 and item_id =3

【讨论】:

    【解决方案2】:

    试试这个 甲骨文

     select order_id,item_id
           from order_item 
           where order_id <299 and item_id = 3 
           and rownum = 1
           order by order_id desc 
    

    SQL 服务器

    select top 1 * 
       from order_item 
       where order_id <299 and item_id = 3 
       order by order_id desc 
    

    【讨论】:

      【解决方案3】:

      你能试试这个查询吗?

      select max(order_id) from order_item where  order_id < ( 
      select order_id from order_item where  order_id = 299 and item_id = 3  ) and item_id = 3;
      

      【讨论】:

      • 你说得对,我没有意识到 order id 是这里的关键列。
      猜你喜欢
      • 2019-02-24
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 2010-12-23
      • 2020-07-02
      • 2012-09-02
      相关资源
      最近更新 更多