簡體   English   中英

Oracle SQL 最接近給定日期的日期

[英]Oracle SQL closest date to given date

我有一個表格,其中有一列用於分類、日期和價格。 像這樣:

group 1  - 03.03.2019 - 5.00
group 1  - 03.02.2018 - 4.00
group 2  - 05.05.2019 - 2.25
group 2  - 05.05.2018 - 1.00

所以(幾乎)每組總是有兩個日期,兩個不同的價格。 現在我需要編寫一個 SQL 語句來獲取每組最接近給定日期的日期(fe 05.05.2019)。 組 1 有兩個日期,SQL 語句需要選擇其中一個最接近給定日期的日期。 所有組都需要這樣做。

我試了幾個小時,但我被卡住了。 謝謝你的幫助

這是使用not exists一種選擇:

select t.*
from mytable t
where not exists (
    select 1
    from mytable t1
    where 
        t1.category = t.category 
        and greatest(t1.date, date '2019-05-05') - least(t1.date, date '2019-05-05')
            < greatest(t.date, date '2019-05-05') - least(t.date, date '2019-05-05')
)

這為您提供了每個組(無論是之前還是之后)的“最接近”記錄到 2019-05-05。

例如,如果您想要 2019-05-05之前最接近的記錄那就簡單一點:

select t.*
from mytable t
where 
    t.date <= date '2019-05-05'
    and not exists (
        select 1
        from mytable t1
        where t1.category = t.category and t1.date <= date '2019-05-05' and t1.date > t.date
    )

您可以在這里使用排名功能

select category, date_value, price from ( 
select category, date_value, price, 
rank() over (partition by category order by 
abs(to_date('2019-05-05','yyyy-mm-dd') - to_date(date_value, 'yyyy-mm-dd')) asc ) rnk
from yourtable )
where rnk = 1

數據庫<>小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM