关于sql:在Oracle中选择包含最新日期和时间的记录

Select a record with most recent date and time in Oracle

本问题已经有最佳答案,请猛点这里访问。

我有一个关于Oracle中的SQL查询的问题,IO需要选择日期和时间最新的行,其中日期和时间插入到两个单独的列中。

TransactionRecords

1
2
3
4
5
6
7
8
9
10
 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

我希望我的查询重新返回最近的交易,应该是:

1
2
3
   CustomerID    TransactionDate   TransactionTime
  ---------------------------------------------------
    0206016        17-APR-17            15:29:34

当我运行以下查询时:

1
2
3
 SELECT * FROM TransactionRecords tst
 WHERE tst.TransactionDate  IN (SELECT MAX(TransactionDate) FROM
 TransactionRecords)

我正在获取最近日期发生的所有交易。有人能给我提些建议吗?


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

1
2
3
4
SELECT *
FROM   your_table
ORDER BY TransactionDate DESC, TransactionTime DESC
FETCH  FIRST 1 ROWS ONLY;

在较低版本中,可以使用ROWNUM伪列:

1
2
3
4
5
6
7
SELECT *
FROM   (
  SELECT *
  FROM   your_table
  ORDER BY TransactionDate DESC, TransactionTime DESC
)
WHERE  ROWNUM = 1;


使用row_number()。我已经使用了CTE作为可见性,但是子查询也可以工作。

1
2
3
4
5
6
7
8
9
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


从TransactionRecords TST中选择*。按TST.交易日期TST.交易时间描述排序