--以下是錯(cuò)誤的sql,唯一難住我的是就是關(guān)聯(lián)查詢最新記錄了,之前想當(dāng)然地用group by來分組獲取最新記錄,但是會(huì)報(bào)錯(cuò),group by的字段必須與查詢的字段相對應(yīng),除非是聚合函數(shù)包裹著
select a.WEBCHECKID,a.WEBSITE,b.RECORDID,b.access_state,b.access_date from TFSWXTS_WEBCHECK a left join TFSWXTS_WEBRECORD b on a.WEBCHECKID=b.WEBCHECKID
group by b.WEBCHECKID,b.access_date having b.access_state=max(b.access_state)
--報(bào)錯(cuò)不是group by 的表達(dá)式
改為使用以下語句
row_number() over(partition by b.webcheckid order by b.access_date desc)
--partition by 按字段分組
--order by 分組,按組內(nèi)排序,desc即最新在第一條
--row_number() 按分組內(nèi)的行個(gè)數(shù),生成行號;1,2,3,……
推出新的sql
--行號作為新字段,并用一個(gè)新select包裹,獲取第一行數(shù)據(jù),即為新記錄
select * from (
select a.WEBCHECKID,a.WEBSITE,b.RECORDID,b.access_state,b.access_date,
row_number() over(partition by b.webcheckid order by b.access_date desc) as ran
from TFSWXTS_WEBCHECK a left join TFSWXTS_WEBRECORD b on a.WEBCHECKID=b.WEBCHECKID
) where recordid is null or ran=1
-- recordid is null是為了防止當(dāng)前webrecord表里面沒有數(shù)據(jù),行號數(shù)據(jù)為混亂,行號此時(shí)就無法作為判斷條件