从最大日期提取数据

时间:2011-05-15 08:43:50

标签: sql oracle plsql

我正在进行如下调整

---------------------------------------------------------------------
| AcnttNo | Date1 | Balance1 | Date2  | balance3 | date4 | balance4 |
|--------------------------------------------------------------------
| 123     | 50282 | 3456     | 45465  | 56557    | 4556  | 324235   |
| 123     | 56757 | 23434    | 234235 | 344324   | 56476 | 5676     |
| 123     | 435   | 2434     | 2343   | 234545   | 24245 | 2423424  |
---------------------------------------------------------------------

例如:

对于每个AcnttNo,将有几行数据用于余额和日期 我需要获得最大日期的余额。

我正在使用PL / SQL开发人员和oracle数据库

2 个答案:

答案 0 :(得分:1)

如果您想要具有最大日期的行:

select
  *
from
  YourTable y
where
  greatest(y.date1, y.date2, y.date3) =
    (select max(greatest(yx.date1, yx.date2, yx.date3))
    from
      YourTable yx)

如果您确实需要与该行上最大日期匹配的余额:

select
  greatest(y.date1, y.date2, y.date3) as GreatestDate,
  case greatest(y.date1, y.date2, y.date3)
    when y.Date1 then 
      y.balance1
    when y.date2 then
      y.balance2
    when y.date3 then
      y.balance3
  end as GreatestDateBalance
from
  YourTable y
where
  greatest(y.date1, y.date2, y.date3) =
    (select max(greatest(yx.date1, yx.date2, yx.date3))
    from
      YourTable yx)

但我认为你真正需要的是重新考虑你的桌面设计。 :)

答案 1 :(得分:0)

我不确定你为什么在你的桌子上有多个日期/余额,但是,下面的内容可以为你提供一些你可以使用的有趣的东西......

SELECT *
FROM YourTable T
WHERE NOT EXISTS (
  SELECT *
  FROM YourTable T2
  WHERE T2.AcntNo = T.AcntNo
  AND T2.Date1 > T.Date1
)