2013-11-26 15 views
0

進出口尋找一種方式來更新條件的一些錶行基本SQL更新查詢的行的更新範圍

我的舊的查詢是這樣的:

update Database1.dbo.Table1 
set Database1.dbo.Table1.AllVisit = (select COUNT(ID) from Database1.dbo.Table2 WHERE UserID = Database1.dbo.Table1.UserID group by UserID) 

現在我只想更新最後一天的Fileds的table1而不是所有的主題 是這個查詢可以使用嗎?

update Database1.dbo.Table1 
    set Database1.dbo.Table1.AllVisit = (select COUNT(ID) from Database1.dbo.Table2 WHERE UserID = Database1.dbo.Table1.UserID And UserDate between 
DATEADD(day, -1, convert(date, GETDATE())) and convert(date, GETDATE()) group by UserID) 

或者這一個:

update Database1.dbo.Table1 
    set Database1.dbo.Table1.AllVisit = (select COUNT(ID) from Database1.dbo.Table2 WHERE UserID = Database1.dbo.Table1.UserID And UserDate between 
DATEADD(day, -1, convert(date, GETDATE())) and convert(date, GETDATE()) group by UserID) Where 
Database1.dbo.Table1.UserDate between 
DATEADD(day, -1, convert(date, GETDATE())) and convert(date, GETDATE())) 
+0

是否只更新前一天的table1行與前一天的數據表table2? – DarkKnight

+0

@HardCoreProgrammer到底是什麼。 即時通訊使用此查詢只更新table1的最後一天行與table2上的最後一天訪問行。其他記錄必須保持不變。 –

回答

1

在這裏你去...

update A 
set A.AllVisit = (select COUNT(ID) 
        from Database1.dbo.Table2 
        WHERE UserID = A.UserID 
          And convert(varchar(100),UserDate,101) = convert(varchar(100),getdate()-1,101) 
        ) 
FROM Database1.dbo.Table1 A
1

隨着表結構爲:

create table Table1 (AllVisit int, UserDate datetime , UserID int) 
insert into Table1 values (0,GETDATE()-1,1),(0,GETDATE()-1,2),(0,GETDATE()-1,3); 
create table Table2 (ID int,UserID int,UserDate datetime) 
insert into Table2 values (1,1,GETDATE()-1),(2,1,GETDATE()-1),(3,1,GETDATE()-1),(4,1,GETDATE()-1),(5,3,GETDATE()-1); 

一個update查詢像下面將工作:

update T1 
SET T1.AllVisit = isnull(T3.idCount ,0) 
FROM Table1 T1 
CROSS APPLY (select COUNT(T2.ID) AS idCount 
      from Table2 T2 
      WHERE T2.UserID = T1.UserID 
      And convert(date,T2.UserDate) = DATEADD(day, -1, convert(date, GETDATE())) -- convert UserDate column to date type if it's a datetime 
      group by T2.UserID)T3 
WHERE convert(date,T1.UserDate) = DATEADD(day, -1, convert(date, GETDATE()))