多表查詢結果出現重複記錄,根據條件只取其中的一條記錄的sql

2021-04-26 06:20:16 字數 3890 閱讀 7804

1樓:匿名使用者

select top 1 * form 表2 where id=(select id form 表1 order by id esc) order by time desc

top 1 選出第一條記錄

order by time desc 按時間倒序排列,這樣第一條記錄就是日期最晚的記錄了內

id=(select id form 表1 order by id esc)表一中的id與表二容中相等的id

sql根據某一個欄位重複只取第一條資料

2樓:

使用分析函式row_number() over (partiion by ... order by ...)來進行分組編號,然後取分組標號值為1的記錄即可。

目前主流的資料庫都有支援分析函式,很好用。

其中,partition by 是指定按哪些欄位進行分組,這些欄位值相同的記錄將在一起編號;order by則是指定在同一組中進行編號時是按照怎樣的順序。

示例(sql server 2005或以上適用):

select s.*

from (

select *, row_number() over (partition by [手機號] order by [店鋪]) as group_idx

from table_name

) swhere s.group_idx = 1

3樓:匿名使用者

用group by 最後一個欄位 用個max()

4樓:發生等將發生

如果僅僅只是查詢出來去從,那麼就用distinctselect distinct 需要去重的列明(允許多列) from table

如果是需要在表中刪除,可以這樣處理

1、建立臨時表,將重複記錄查詢出來去重插入到臨時表2、刪除實表中的重複記錄

3、將臨時表中的記錄插入到實表

處理完成

5樓:匿名使用者

select * into ##tmp_table from 表where 1=2

declare @phoneno int

declare cur cursor forselect 手機號 from 表 group by 手機號open cur

fetch next from cur into @phonenowhile @@fetch_status=0begin

insert into ##tmp_tableselect top 1 from 表 where 手機號=@phoneno

fetch next from cur into @phonenoendselect * from ##tmp_tabledrop table ##tmp_table

6樓:匿名使用者

最簡單的 select distinct (手機號)

7樓:老漢肆

select

temp.id,

temp.device_id,

temp.update_dtm,

temp.test_result

from (

select

t.id,

t.device_id,

t.update_dtm,

t.test_result,

row_number() over(partition by device_id order by t.update_dtm desc) as row_***

from device_info_tbl t ) tempwhere temp.row_*** = '1'

sql用inner join內關聯查詢有多條記錄一樣只取一條?

8樓:匿名使用者

select min(b.flow_id),a.item_id from test_table a inner join test_table b on a.

flow_id!=b.flow_id and a.

item_id=b.item_id where a.def_sup_flag=1 group by a.

item_id

--應該是這樣寫吧

--不過我覺得你是要實現的功能是不是,def_sup_flag等於1,如果item_id相同就取第一條記錄

select t.* from test_table t

inner join (

select min(flow_id) flow_id from test_table

where def_sup_flag=1 group by item_id) t2

on t.flow_id=t2.flow_id

9樓:相約

級聯查詢的時候,主表和從表有一樣的欄位名的時候,在mysql上命令查詢是沒問題的。但在mybatis中主從表需要為相同欄位名設定別名,設定了別名就ok了。

解決辦法:

1.一對多不能用association,要用collection:根據經驗,使用association這個元素很容易出錯,建議在resultmap中先換一種寫法,不要用association。

2.修改測試一下,如果成功的話,就基本可以去頂是association的問題了,之後查一下association詳細資料,應該能解決。如果不是association的問題,就調查一下配置檔案等等,總能夠解決的。

3.resultmap配置有問題:發現問題的關鍵在於resultmap中如果不定義類似主鍵之類的能夠區分每一條結果集的欄位的話,會引起後面一條資料覆蓋前面一條資料的現象。

一個表中有重複記錄如何用sql語句查詢出來。。。?

10樓:匿名使用者

不知道你什麼資料庫.

如果資料庫支援 row_number() 函式的話, 倒是很省事的.

-- 首先建立測試表

create table test_delete(name varchar(10),

value int

);go

-- 測試資料,其中 張三100 與 王五80 是完全一樣的insert into test_deleteselect '張三', 100

union all select '張三', 100union all select '李四', 80union all select '王五', 80union all select '王五', 80union all select '趙六', 90union all select '趙六', 70go-- 首先查詢一下, row_number 效果是否滿足預期select

row_number() over (partition by name, value order by (select 1) ) as no,

name,

value

from

test_delete

no name value----- ---------- -----------1 李四 801 王五 802 王五 801 張三 1002 張三 1001 趙六 701 趙六 90從結果上可以看到,如果有重複的,完全一樣的話, no 是有大於1的。

11樓:彭文傑

select row_number() over(partition by 排序欄位 order by 不同的欄位 desc) as num,

t.*from table

where num = 2

SQL多表查詢

wlkc.item desc select from bom where bom.item like trim edit2.text 這個等於就會報錯,因為後面查詢的不是一個值,而且不一定是一個欄位,關聯要用id 去查 比如說 select from a where a.id in select i...

mybatis聯合多表查詢resulttype怎麼寫

select c.class id,c.class name,s.s id,s.s name from class c left join classstudent cs on c.class id cs.class id left join student s on cs.student id s...

SQL查詢問題(統計模組查詢功能多表複雜查詢)請教SQL達人

請參考以下語句 select t1.rq1 as rq isnull x.xs m,0 as xs m,isnull c.cg m,0 as cg m from select rq as rq1 from cgunion select rq from xs as t1left join select...