的一種方法是使用解析函數row_number()
(或也許有其近親,或者rank()
或dense_rank()
,這取決於需要。如果沒有「關係」,則它們都會產生相同的輸出,這意味着您不能有兩行具有相同的name
和相同的daytime
)。
這是更經常使用與rn = 1
得到最大daytime
;如果您要使用最新的「第二個」daytime
,請使用rn = 2
。
內部查詢爲輸入表中的每一行返回一行 - 在每行和每列中具有相同的列和值,並且添加了一列,rn
,顯示其組中每行的「排名」與name
(partition by
中的列)相同的行,由daytime
desc
結尾排序。那麼它應該是顯而易見的外部查詢。
with
test_data (name, daytime) as (
select 't12', to_date('12-Mar-2016', 'dd-Mon-yyyy') from dual union all
select 't12', to_date('14-Aug-2016', 'dd-Mon-yyyy') from dual union all
select 't34', to_date('13-Jan-2005', 'dd-Mon-yyyy') from dual union all
select 't34', to_date('18-Mar-2005', 'dd-Mon-yyyy') from dual
)
-- End of test data (not part of the solution). SQL query begins BELOW THIS LINE
select name, daytime
from (
select name, daytime,
row_number() over (partition by name order by daytime desc) as rn
from test_data
)
where rn = 2
;
NAME DAYTIME
---- -----------
t12 12-Mar-2016
t34 13-Jan-2005
2 rows selected.
我很想用min(日期)。請澄清,如果這不是你所需要的。 – GurV
我不能使用min(日期),因爲我需要某個日期前的日期,因爲可以是「t12 11-jan-2016」,但我需要「t12 12-Mar-2016」。 –
請添加更多數據來清除這一點。 「之前」是什麼意思? – GurV