Обновление с помощью MIN - PullRequest
       1

Обновление с помощью MIN

2 голосов
/ 14 сентября 2011

У меня есть две таблицы.

TableA

    Userid  Starttime               reason
    John    yyyy-mm-dd hh:mm:ss     logged in

Table B

    Userid  Date            Starttime              reason
    John    yyyy-mm-dd    yyyy-mm-dd hh:mm:ss     logged in

Мне нужно обновить время начала таблицы B с помощью min (a.starttime), в то время как a.Userid = b.userid, a.starttime = b.date,and reason = 'logged in'.

У меня возникли проблемы с использованием Min (a.starttime) в качестве того, что я хочу использовать для обновления.

Мой запрос приведен ниже:

update B
set B.starttime = (
  select Min(A.Starttime)
  from table as A
  where B.UserID = A.UserID
  and (CONVERT(DATETIME,A.DATE,102)) = (CONVERT(DATETIME,B.Date,102)))
  and  (A.Reason = 'loggedin')
)
from table2 as B

Я конвертирую даты, поскольку таблица B содержит дату, например, 2011-09-13 00:00:00, а A - дату и время.

Ответы [ 2 ]

5 голосов
/ 14 сентября 2011

Если вы просто не получаете правильные результаты, это может быть связано с тем, что вам нужно использовать convert (varchar, date, 102) вместо convert (datetime, date, 102).Если это не поможет, попробуйте это.

Вместо выполнения подзапроса внутри части SET, используйте его как производную таблицу и присоединитесь к ней.Даже если приведенное выше исправляет результаты, приведенный ниже запрос должен быть гораздо более эффективным.

update B
set B.starttime = A.starttime
from table2 as B
INNER JOIN (
select A.UserId, convert(varchar, A.Date, 102) as adate, Min(A.Starttime) as starttime
  from table as A
  WHERE  (A.Reason = 'loggedin')
  GROUP BY A.UserId, convert(varchar, A.Date, 102)
) A on B.Nordia_ID = A.UserId and A.adate = convert(varchar, B.StatusDateTime, 102)
0 голосов
/ 14 сентября 2011

Если вам нужно сократить время, не используйте CONVERT вообще.Сделайте это вместо этого:

DATEADD(dd,0,DATEDIFF(dd,0,A.DATE)) = DATEADD(dd,0,DATEDIFF(dd,0,B.StatusDateTime))

Это даты, рассматривайте их как даты, и вы не столкнетесь с странными ошибками при преобразовании их в строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...