2013-11-26 6 views
0

Im ищет способ обновить некоторые строки таблицы базы данных о состоянииSql Update Query для диапазона обновления строк

мой старый запрос как:

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 из таблицы1, а не все темы - этот запрос нормально работать?

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

Вы хотите обновить только таблицы предыдущего дня таблицы 1 предыдущего дня с таблицей данных предыдущего дня2? – DarkKnight

+0

@HardCoreProgrammer Именно то, что им до. im, используя этот запрос, чтобы обновить только строку последнего дня таблицы1 с помощью строки последнего дня посещения таблицы2. Другая запись должна быть немодифицирована. –

ответ

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()))