iT邦幫忙

0

[#已解決] Oracle 資料篩選問題

  • 分享至 

  • xImage

目前有一查詢語法,想要將查詢出來的結果某一欄位不重複資料只取一筆出來
查詢語法如下:
https://ithelp.ithome.com.tw/upload/images/20220512/20146772lgYSJZDCxy.jpg
結果是以下:
https://ithelp.ithome.com.tw/upload/images/20220512/20146772G5FF4EY1Qc.jpg
反藍色這三筆因為ULD資料是重複的雖然後面的資料有不同的地方但我只想針對ULD,我想要在這三筆中只取出一筆在這個Table中。
我有使用過distinct和union all/union這兩種方法,可是還是沒有篩選到,不然就是我寫錯了=ˇ= 如下:
https://ithelp.ithome.com.tw/upload/images/20220512/20146772koBOOtSU7n.pnghttps://ithelp.ithome.com.tw/upload/images/20220512/20146772e2QrcOEMdt.png
目前我是把他們分群之後,就不知道該如何下手,也不確定是不是朝這個方向前進
https://ithelp.ithome.com.tw/upload/images/20220512/20146772TmDBf4wtsT.pnghttps://ithelp.ithome.com.tw/upload/images/20220512/20146772BGh1aJ4o06.png
還請各位大神相救...
小的在線等待QQ

淺水員 iT邦大師 6 級 ‧ 2022-05-12 22:35:01 檢舉
可以想一下怎麼發問對回答的人會比較方便
下面這個問跟答我覺得都還滿清楚的,提供參考
https://ithelp.ithome.com.tw/questions/10208391

也可以用 db fiddle 先建好假資料表
然後說明一下預期的輸出
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
shijung
iT邦新手 4 級 ‧ 2022-05-13 11:47:22
最佳解答

我是你可愛的隊友,你把你那一大串包起來

select * from (
A union B 
) TEMP1

再排序


select * from (select ROW_NUMBER() OVER (
    PARTITION BY ULD
    ORDER BY ACCEPTANCE_DATETIME DESC) sort_id,* from (
A union B 
) TEMP1)TMP2 where sort_id = 1

針對同一個UID 使用ACCEPTANCE_DATETIME 排序最新
預設是小到大要大到小就要使用降冪 DESC

order by money desc, costtime asc 
/* 這句排序意思是:優先篩錢最多的,然後假設錢一樣我要選花的時間最少的*/
/*因asc是預設所以可以省略 =>*/
order by money desc, costtime
0
rogeryao
iT邦超人 7 級 ‧ 2022-05-13 07:05:53
CREATE TABLE SENSOR (
SEN_NUM varchar2(10),
SEN_NAME varchar2(30),
SEN_BRAND varchar2(20),
SEN_FUNC varchar2(50),
NODE_ID varchar2(10));

insert into SENSOR(SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC,NODE_ID) 
values('T01','MA1','MA2','O3','S001');
insert into SENSOR(SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC,NODE_ID) 
values('T02','MB1','MB2','SO2','S001');
insert into SENSOR(SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC,NODE_ID) 
values('T03','MC1','MA3','NOX','S001');
insert into SENSOR(SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC,NODE_ID) 
values('T04','MB1','MC2','SO2','S002');
insert into SENSOR(SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC,NODE_ID) 
values('T05','MC1','MB2','XOX','S002');
insert into SENSOR(SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC,NODE_ID) 
values('T06','MC1','MA2','O3','S002');
insert into SENSOR(SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC,NODE_ID) 
values('T06','MC1','MA2','O3','S002XXX');

語法一 :

SELECT DISTINCT SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC
FROM SENSOR
UNION 
SELECT DISTINCT SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC
FROM SENSOR

語法二 :

SELECT SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC
FROM SENSOR
UNION 
SELECT SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC
FROM SENSOR
GROUP BY SEN_NUM,SEN_NAME,SEN_BRAND,SEN_FUNC

Demo

我要發表回答

立即登入回答