12345-651
12345-652
12345-6E1
12345-6E2
12345-A52
12345-AS2
12876-6G1
12876-6G2
12876-A71
12876-A72
.....等
今如要把以上的號碼擷取該前5碼之排序最小之前2筆
要顯示如下所示
12345-651
12345-652
12876-A71
12876-A72
:判斷標準 前5碼相同為同一個組別,再以第7和8碼判斷取最小值之前2筆
例:12345 相同為同一組 , 第7+8碼 65,6E,A5,AS 排序最小取出前2筆
->12345-651
12345-652
....等
請問各位前輩在SQL 語法要如何下呢?我有些想不通??謝謝
我自己想到的辦法是 透過 SUBSTRING(欄位名稱 or '字串',起始數字,結束數字) 新欄位名稱
select 欄位A,SUBSTRING(欄位A,1,5) CC,SUBSTRING(欄位A,7,8) DD,SUBSTRING(欄位A,8,8)EE from 表單名稱
你就可以獲得以上的資料 然後再透過你想要怎麼要排序去下Order by
create table ithelp170924 (
val char(9) not null
);
insert into ithelp170924 values
('12345-651'),
('12345-652'),
('12345-6E1'),
('12345-6E2'),
('12345-A52'),
('12345-AS2'),
('12876-6G1'),
('12876-6G2'),
('12876-A71'),
('12876-A72');
--
with t1 as (
select val
, row_number() over (partition by left(val, 5)
order by substring(val from 8 for 1), substring(val from 7 for 1) ) rn
from ithelp170924
)
select val
from t1
where rn < 3;
val
-----------
12345-651
12345-652
12876-A71
12876-A72
(4 筆資料列)