从具有最大日期列的列中获取记录

时间:2018-08-09 12:20:12

标签: sql oracle

对于下表


    ID           DATE              FIELD1           FIELD2       FIELD4
    123456  01.07.2014 00:00:00   EMPLOYER GROUPS     TMC       SELECT CARE HMO
    123789  01.07.2017 00:00:00   EMPLOYER GROUPS     MQC       SELECT CARE HMO

如何仅选择具有max(date)的一行?即2017年7月1日

4 个答案:

答案 0 :(得分:2)

在Oracle 12+中,您可以使用:

select t.*
from t
order by date desc
fetch first 1 row only;

在早期版本中,您使用子查询:

select t.*
from (select t.*
      from t
      order by date desc
    ) t
where rownum = 1;

如果您需要多个具有相同最大日期的记录:

select t.*
from t
where t.date = (select max(t2.date) from t);

答案 1 :(得分:2)

select *
from theTable
where Date = (select max(date) from theTable)

应该这样做。如果多行具有相同的日期,请添加top 1

答案 2 :(得分:0)

对于tsql / SQL Server,您可以使用以下内容

DECLARE @max_date datetime;
SELECT @max_date = max(DATE) from table_name;
SELECT TOP 1 * FROM table_name WHERE DATE = @max_date;

“ TOP 1”确保您仅收到1行。 除非您在查询中添加“ ORDER BY”语句,否则此行将是任意的。

答案 3 :(得分:0)

或者

dense_rank()函数可以用作:

select dt, ID
  from
(
select dense_rank() over (order by "Date" desc) as dr,
       "Date" as dt,
       ID
  from tab
)
where dr = 1;

或者如果您确定没有 tie (“ Date”列中的 ),甚至可以使用row_number()函数:

select dt, ID
  from
(
select row_number() over (order by "Date" desc) as rn,
       "Date" as dt,
       ID
  from tab
)
where rn = 1;

SQL Fiddle Demo