1. 程式人生 > >sql 語句查詢 按某欄位去重 保留按某個欄位排序top1

sql 語句查詢 按某欄位去重 保留按某個欄位排序top1

例子:

create table tablename  (id int identity(1,1),attachid int,name varchar(10))
insert into tablename  values(23,'sss')
insert into tablename   values(33,'sdfs')
insert into tablename   values(33,'4434')
insert into tablename   values(45,'dsdsd')

select * from  tablename  as  a where not exists (select 1 from  tablename  where attachid=a.attachid and name<a.name) 

按某個欄位去重              保留按某個欄位排序的最大/小值

       後面括號裡的意思是再從原表中找有沒有比當前記錄相同欄位的比較欄位更大或更小的 如果有  則不插入  如果沒有  則插入

       exists   是個條件  後面的結果集有值的時候 條件成立   後面結果集為空的時候 條件不成立   所以後面子查詢中select 後面跟什麼欄位不重要  關鍵是看結果集是否為空    

       加not  是取相反的意思

       name <a.name 是取最小的     反之是取最大的 

原資料

id  attachid name
1    23       sss
2    33       sdfs
3    33       4434
4    45       dsdsd

比較後

id          attachid    name

----------- ----------- ----------

1           23          sss

3           33          4434

4           45          dsdsd

注意:from後面不能跟別名只能跟臨時表 #table

複雜一點的例子:

 查詢 WorkFlowTask 表中 ReceiveID為某值 而且狀態是2或者3的 記錄  而且在同樣GroupID 中只保留時間最新的  並且結果按完成時間排序

(select * from 
( SELECT *,ROW_NUMBER() OVER(ORDER BY CompletedTime1 DESC) AS PagerAutoRowNumber
FROM WorkFlowTask 
WHERE ReceiveID='00000000-0000-0000-0000-000000009667' AND [Status] IN(2,3) ) as a 
where not exists  --其實後面只是一個查詢條件(包含子查詢)
        (select 1 from WorkFlowTask 
           where GroupID=a.GroupID and ReceiveTime>a.ReceiveTime and ReceiveID='00000000-0000-0000-0000-000000009667' AND [Status] IN(2,3)
         )

相關推薦

sql 語句查詢 保留某個排序top1

例子: create table tablename  (id int identity(1,1),attachid int,name varchar(10)) insert into tablename  values(23,'sss') insert into tabl

根據某個 根據另一個排序的一個SQL

背景:一張表 有 name , crt_time , work_sts 三個欄位 這張表裡存在這樣的資料 'a', '2018-12-18 21:37:24', '未''a', '2018-12-19 09:37:24', '完''a', '2018-12-19 21:37:24', '未''b', '2

es Java 聚合方法——單個並輸出部分資訊

注意事項:版本號:5.5.1topHits方法是獲取從上向下的k條資料,k通過size(k)開設定,對於去重來說,這裡k=1fetchSource(String[] includes,String[] excludes)是獲取部分欄位,引數為兩個字串陣列,includes為要

SQL語句查詢重複數量排序

SQL語句 描述:exhibitiononline表主鍵exhiid,    exhibitor表有外來鍵 exhid,對應表 exhibitiononline的主鍵exhiid;           exhibitiononline表--------->      

sql語句查詢中包含指定字串的資料列表,完全匹配中逗號中間的字串資料

查詢出,使用者表中name欄位完全包含小明的資料資訊 User表 id name userInfo 1 小明,明明 很帥 2 小明,李明 3 明天,李強 SELECT * FROM `User` where concat(',

mysql 關於查詢

 使用distinct 和 group by 對於查詢多欄位,而只對一個欄位去重是查不到正確值得,因為distinct 後面跟多欄位,mysql會對只有這些子對完全重複才能去重,而group by 查詢的欄位也只能在 group 

查詢:對,並獲得其他資訊

想在table1表中,查公司中的員工名字有哪些,table1表中員工有重名的情況,所以要對員工名去重,並且要得到員工名字、及其對應的部門號dept_id 即:對name欄位去重,並獲得name, dept_id 欄位 在thinkphp3.2 中 $table1= M('table1

使用一條sql語句查詢兩個表的某個某個值時

使用一條sql語句查詢這兩個表的分數相同的人的名字(使用聯合查詢)    create table a( id int(10), score int(3), name varchar(20), )charset utf8; create table

帝國CMS,使用sql語句查詢時,有些不顯示

使用sql查詢資料時,有些欄位不顯示,比如<?=$bqsr[classname]?>顯示為空,或者其他的。 [e:loop={'select classid,classpath,classname from [!db.pre!]enewsclass where

根據兩個SQL語句

delete from aop_app_ipmlinfo a where a.impl_id not in ( select max(t.impl_id) c from aop_app_ipmlin

MYSQL中SQL語句查詢表字段名、註釋、型別

select column_name,column_comment,data_type from information_schema.columns where table_name='你的表名'

SQL語句查詢時有為中文時的解決方法

我在寫JDBC的是時候,遇見了因為在SQL語句中含有中文無法執行的情況,於是我把這句話放到mysql客戶端中測 試,結果通過,我就估計不是字元編碼問題,是PreparedStatement這個介面做了一些我不知道的處理導致這個問題的 發生。而且一般直接使用?問號代替動態查詢要求,而在客戶端中必須加上雙引號,

SQL語句distinct的多個問題

經典例子 select distinct name, id from table 或者 select name,id from table group by name 像這樣是錯誤的寫法,distinct不起作用的 曲線救國寫法: select name,id f

SQL語句怎麼對單個,並且要顯示所有列(也可用於後,顯示最新資料)

取最大id: select * from 表名  where 主鍵 in(select max(主鍵)   from 表名 group by 要去重的欄位 )  取最新時間:(時間並列會全部展示) select * from 表名  where date  in(sel

sql語句查詢表裡是否存在重複資料

SELECT     * FROM     ( SELECT         re_unid,         COUN

java8中List根據

前言 在做一個記錄操作日誌功能,根據型別及稽核使用者名稱稱去查詢操作日誌。稽核使用者名稱稱,在這裡將資料全部查詢出來了,可是我只想要每個人的姓名,而不是出現重複人名,比如:楊平,出現了好多。如何解決此問

【轉】mysql查詢根據部分

mysql有個關鍵字distinct用來去重的,但是使用時只能放在查詢欄位的最前邊 如: SELECT DISTINCT user_id,age FROM t_user; 若不是放在最前邊,如: SELECT user_id, DISTINCT age FROM t_us

pyspark 根據 取時間最新

cj_spouse_false = cj_spouse_false.withColumn("row_number", \                                        F.row_number().over(Window.partition

php 二維陣列根據

有時候,查詢出來的陣列會有好多重複的資料,要想去除這些資料,有以下幾種方法: 第一種:二維陣列中直接去掉重複的鍵 <?php function array_unique_fb($array2D){ foreach ($array2D as $v){ $v=joi

多個後進行求和-SQL

【問題】怎樣對多個欄位進行分別去重後再對其求和; 【解法】 相當於把多個欄位的字串連線起來: select count(DISTINCT fcode+cast(fread_date as varchar(30))) from my_table http: