亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

sql 刪除重復項

sql 刪除重復項

白豬掌柜的 2018-12-07 07:36:37
下面是創建一個存儲過程: USE [dnn6_1] GO /****** Object:? StoredProcedure [dbo].[WNKAdvise_UpdateItemsLog_GetTemplatesUsingInfo]??? Script Date: 2013/4/28 9:22:58 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --IF EXISTS(SELECT * FROM sysobjects WHERE name='WNKAdvise_UpdateItemsLog_GetTemplatesUsingInfo') -- DROP PROCEDURE WNKAdvise_UpdateItemsLog_GetTemplatesUsingInfo ALTER PROCEDURE [dbo].[WNKAdvise_UpdateItemsLog_GetTemplatesUsingInfo] ? -- 定義存儲過程的參數-- ?? @TemplateType int, ?? @TemplateAddType int, ?? @StartDate DateTime, ?? @EndDate DateTime AS BEGIN ??? SET DATEFORMAT ymd; ?--定義時間變量-- ?declare @EndDate0 DateTime ?declare @StartDate0 DateTime ?declare @StartDate1 DateTime ?declare @StartDate2 DateTime ??? set @StartDate = null ??? set @EndDate = null ?--獲取系統的當前時間 ?select? @EndDate0 = getdate() ?--select? @StartDate0 = dateadd(dd,-1,getdate()) ?--120的作用是將獲取的當前時間按2006-05-16 10:57:49格式顯示 ??? select? @StartDate0 = convert(varchar(10),dateadd(hh,-24,getdate()),120)? ?--聲明將當前時間退回到七天前 ??? select? @StartDate1 = dateadd(dd,-7,getdate()) ?--聲明將當前時間回退到一個月前 ?select? @StartDate2 = dateadd(mm,-1,getdate())? ???? --當天 ?SELECT lg.TemplateId,count(lg.TemplateId) as DayCount INTO #DayAccess ?FROM dbo.WNKAdvise_UpdateItemsLog? lg ??? inner join WNKAdvise_AdviseTemplates t ON t.TemplateId = lg.TemplateId ?WHERE (CreatedTime? > @StartDate0 OR @StartDate0 is null) ??AND (CreatedTime <= @EndDate0 OR @EndDate0 is null) ??AND (TemplateType = @TemplateType OR @TemplateType=-1) ??AND (TemplateAddType = @TemplateAddType OR @TemplateAddType = -1) ?GROUP BY lg.TemplateId ?--最近一周 ?SELECT lg.TemplateId,COUNT(lg.TemplateId) as WeekCount INTO #WeekAccess ?FROM dbo.WNKAdvise_UpdateItemsLog? lg ??? inner join WNKAdvise_AdviseTemplates t ON t.TemplateId = lg.TemplateId ?WHERE ???? (CreatedTime >= @StartDate OR @StartDate is null) ??AND (CreatedTime <= @EndDate OR @EndDate is null) ??AND (TemplateType = @TemplateType OR @TemplateType=-1) ??AND (TemplateAddType = @TemplateAddType OR @TemplateAddType = -1) ?GROUP BY lg.TemplateId ??? --最近一月 ?SELECT lg.TemplateId,COUNT(lg.TemplateId) as MonthCount INTO #MonthAccess ??FROM dbo.WNKAdvise_UpdateItemsLog lg ??? inner join WNKAdvise_AdviseTemplates t ON t.TemplateId = lg.TemplateId ?WHERE ???? (CreatedTime >= @StartDate2 OR @StartDate2 is null) ??AND (CreatedTime <= @EndDate0 OR @EndDate0 is null) ??AND (TemplateType = @TemplateType OR @TemplateType=-1) ??AND (TemplateAddType = @TemplateAddType OR @TemplateAddType = -1) ?GROUP BY lg.TemplateId ?--總計 ??? SELECT? lg.TemplateId,Count(lg.TemplateId) as ToatalCount INTO #HistoryAccess ??FROM dbo.WNKAdvise_UpdateItemsLog lg ??? inner join WNKAdvise_AdviseTemplates t ON t.TemplateId = lg.TemplateId ?WHERE (TemplateType = @TemplateType OR @TemplateType=-1) ??AND (TemplateAddType = @TemplateAddType OR @TemplateAddType = -1) ?GROUP BY lg.TemplateId ?SELECT h.TemplateId,ToatalCount FROM #WeekAccess w,#HistoryAccess h ?END 執行后有很多的重復項,如何刪除重復項值保留一項!俺是第一次寫存儲過程,請大蝦門賜教!
查看完整描述

4 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

假設一個表test(ID,a,b),其中ID是主鍵,a和b是要判斷是否重復的列,寫法如下:

delete test where  (a,b) in 
(
       select a,b from 
       (
              select a,b,count(*) as rowc 
              from test 
              group by a,b
       ) 
       where rowc > 0
) and  id not in 
       (
            select min(id) 
            from test 
            group by a,b
       )

這是oracle的寫法,如果是sqlserver,請考慮使用top關鍵字

查看完整回答
反對 回復 2019-01-07
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

查詢的時候distinct。上面的代碼有點頭暈,不知道對你有用沒!

查看完整回答
反對 回復 2019-01-07
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

Group By 列名

查看完整回答
反對 回復 2019-01-07
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

直接distinct吧,這個看著頭暈啊

查看完整回答
反對 回復 2019-01-07
  • 4 回答
  • 0 關注
  • 565 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號