0

我有以下数据。

table A

id   

1

2

3

table B

id       name      data1        data2     datetime

1        cash      12345.00                12/12/2012 11:10:12

1        quantity   222.12                  14/12/2012 11:10:12

1        date     20/12/2012               12/12/2012 11:10:12

1        date     19/12/2012                13/12/2012 11:10:12

1        date     13/12/2012                14/12/2012 11:10:12

1        quantity   330.10                   17/12/2012 11:10:12

我想在一行中检索数据,如下所示:

tableA.id      tableB.cash        tableB.date     tableB.quantity 

1               12345.00          13/12/2012       330.10

我想根据 max(datetime) 检索。

4

2 回答 2

2

数据模型似乎很疯狂——将 an 连接ORDER_IDCUSTOMER_ID. VARCHAR2将日期存储在列中是没有意义的。CUSTOMER在 a和a 之间没有关系是没有意义的ORDER。表中的两行ORDER具有相同的ORDER_ID. ORDER也是保留字,因此您不能将其用作表名。我最好的猜测是你想要类似的东西

select * 
  from customer c 
       join (select order_id, 
                    rank() over (partition by order_id 
                                     order by to_date( order_time, 'YYYYMMDD HH24:MI:SS' ) desc ) rnk
               from order) o on (c.customer_id=o.order_id)
 where o.rnk = 1

如果这不是您想要的,请(正如我在评论中多次询问的那样)发布预期的输出。

这些是我通过查询和您的示例数据得到的结果(修复ORDER表的名称以使其实际有效)

SQL> ed
Wrote file afiedt.buf

  1  with orders as (
  2    select 1 order_id, 'iphone' order_name, '20121201 12:20:23' order_time from dual union all
  3    select 1, 'iphone', '20121201 12:22:23' from dual union all
  4    select 2, 'nokia', '20110101 13:20:20' from dual ),
  5   customer as (
  6    select 1 customer_id, 'paul' customer_name from dual union all
  7    select 2, 'stuart' from dual union all
  8    select 3, 'mike' from dual
  9  )
 10  select *
 11    from customer c
 12         join (select order_id,
 13                      rank() over (partition by order_id
 14                                       order by to_date( order_time, 'YYYYMMDD HH24:MI:SS' ) desc ) rnk
 15                 from orders) o on (c.customer_id=o.order_id)
 16*  where o.rnk = 1
SQL> /

CUSTOMER_ID CUSTOM   ORDER_ID        RNK
----------- ------ ---------- ----------
          1 paul            1          1
          2 stuart          2          1
于 2012-12-17T21:25:48.757 回答
1

尝试类似的东西

SELECT *
  FROM CUSTOMER c
  INNER JOIN ORDER o
    ON (o.CUSTOMER_ID = c.CUSTOMER_ID)
  WHERE TO_DATE(o.ORDER_TIME, 'YYYYMMDD HH24:MI:SS') =
    (SELECT MAX(TO_DATE(o.ORDER_TIME, 'YYYYMMDD HH24:MI:SS')) FROM ORDER)

分享和享受。

于 2012-12-17T19:57:08.733 回答