close

 

 

 

由於工作上的需求,想要抓取客戶最後一天的交易日, 比如: 一個客人在多家分公司都有帳號,我要抓到最後交易的那一筆客人的分公司與帳號資料

若是這樣,其實只需要 select ID,max(last_date) from table group by id 然後再根據id去join TABLE的其他資訊 即可

但業務邏輯是同一個客人的最後交易日在多家分公司可能會一樣!!!  這樣會抓到多筆,我只需要抓一筆,因此找到ORACLE有一個FUNCTION叫 first_value ()

因此我將sql修改為

 

select  distinct id,
        first_value(brno) over (partition by id  order by LAST_DATE desc) brno,
        first_value(cuno) over (partition by id  order by LAST_DATE desc) cuno
 from TABLE;

 

這樣就可以只抓取到LAST_DATE 大到小排序後的第一筆,若有相同LAST_DATE 也只會抓到第一筆~~

關鍵於:  隨機抓到第一筆的function叫做First_Value後面over (partition by 姓名) 是表示針對每個Name抓取第一筆資料
 

 

 

參考: http://bebooo.pixnet.net/blog/post/101812633-oracle資料庫的sql語法有只抓一筆資料的語法嗎

arrow
arrow
    全站熱搜

    to52016 發表在 痞客邦 留言(1) 人氣()