在Oracle

时间:2017-04-18 14:32:52

标签: sql oracle greatest-n-per-group

我对Oracle中的SQl查询有疑问,其中IO需要选择具有最新日期和时间的行,其中日期和时间被插入到两个单独的列中。

TransactionRecords

 CustomerID    TransactionDate   TransactionTime
-------------------------------------------------------
  0206016         17-APR-17         15:29:34
  0213570         17-APR-17         15:29:32
  0211384         17-APR-17         13:29:34
  0487674         16-APR-17         14:29:30
  0487759         15-APR-17         13:29:32
  0487213         12-APR-17         13:29:32
  0191022         11-APR-17         15:29:33
  1141158         29-OCT-16         01:25:51

我希望我的查询能够重新开始最近的交易:

   CustomerID    TransactionDate   TransactionTime
  ---------------------------------------------------
    0206016        17-APR-17            15:29:34

当我运行以下查询时:

 select * from TransactionRecords tst
 where tst.TransactionDate  in (select max(TransactionDate) from 
 TransactionRecords)

我收到了最近一次发生的所有交易。 有人可以给我任何建议吗?

3 个答案:

答案 0 :(得分:1)

在Oracle 12c中,您可以执行以下操作:

Obeseravble.concat(Observable.just(localDataItemList),Observable.just(remoteDataItemList))
.observeOn(Schedulers.computation())
.subcribeOn(AndroidScheulers.mainThread())
.subcribe(new Subscriber<List<Item>>(){
    @Override
    public void onCompleted() {
    }
    @Override 
    public void onError(Throwable e) { 
    } 
    @Override 
    public void onNext(List<Item> concatinatedItemList) { 
        //this will have any duplicated items in case
        //if one item happend to be in the both list before 
    }
});

在较低版本中,您可以使用SELECT * FROM your_table ORDER BY TransactionDate DESC, TransactionTime DESC FETCH FIRST 1 ROWS ONLY; 伪列:

ROWNUM

答案 1 :(得分:0)

使用row_number()。我已经使用CTE进行可见性,但子查询也可以使用

with CTE as
(
  select t1.*,
         row_number() over(order by TransactionDate desc, TransactionTime desc) as rn
  from MyTable t1
)
select CTE.*
from CTE
where rn = 1

答案 2 :(得分:-2)

从TransactionRecords tst中选择* ORDER BY tst.TransactionDate || tst.TransactionTime DESC