Ok, I think I need to try to restate my problem.

I have an event_log table, which tracks events (!). Basic structure
is:

table: event_log
   event_time  timestamp
   event_id    int
   user_id     int

and my user table:

table: user
   user_id     int
   name        varchar(50)
   last_visit  datetime


I want to run a query that updates the last_visit column of user with
the MAX(event_time) row for which the user_id's match, but only if I
find an event:

update user U
set U.last_visit = (select max(L.event_time) from event_log L
                    where L.user_id = U.user_id)

I would like to do it without a subquery, I thought that the
multiple table syntax for UPDATE would do it, but I can't wrap
my head around it.

UPDATE user U, event_log L
SET U.last_visit = MAX(L.event_time)
WHERE U.user_id = L.user_id
GROUP BY L.event_time

I guess the main question is - CAN I do this? Or will I have to resort
to either a subquery, or external processing?

thanks,
andy











Martin wrote:
Hi Andy-

the MAX function needs group by for the column for which it calculating max value as in this example
(select MAX(EL.event_time)
//                     from event_log EL
//                     where EL.enduser_acnt = E.enduser_acnt

//Inner join forces selection on columns which contain non null values as seen here
                     from event_log AS EL INNER JOIN Event AS E
                     ON EL.enduser_acnt = Event.enduser_anct

                      group by EL.event_time);
//                     group by EL.enduser_acnt);

HTH
Martin
----- Original Message ----- From: "Andy Wallace" <[EMAIL PROTECTED]>
To: "Martin" <[EMAIL PROTECTED]>
Cc: "mysql list" <mysql@lists.mysql.com>
Sent: Wednesday, May 07, 2008 6:21 PM
Subject: Re: question about update/join query


I want to put only the max date into the field... I was thinking that max
was a group function, but now that I type that out loud, perhaps I'm not
using all the neurons available... hmmm...


thanks,
andy

Martin wrote:
Hi Andy-

Is there a reason why you are using Query group by clause in UPDATE statement?

M
----- Original Message ----- From: "Andy Wallace" <[EMAIL PROTECTED]>
To: "mysql list" <mysql@lists.mysql.com>
Sent: Wednesday, May 07, 2008 1:07 PM
Subject: Re: question about update/join query


Clarification: I DON'T want to update the last_visit field if there
is no matching event record...

I managed to get this to sort of work:

update enduser E
set E.last_visit = (select MAX(EL.event_time)
                    from event_log EL
                    where EL.enduser_acnt = E.enduser_acnt
                    group by EL.enduser_acnt);

but it updated the last_visit field to the default value if it found
no matching event_log row... which I don't want to happen.

thanks,
andy

Andy Wallace wrote:
Hey all -
I have two tables - an event_log table, and a user table. There is
a "last_visit" column in the user table, and I want to update it from
the event_log with the most recent event timestamp. And I want to do
it without a subquery, eventually, both these tables will be pretty
large, especially the event_log.

I tried this:

update enduser E join event_log EL on EL.enduser_acnt = E.enduser_acnt
set E.last_visit = MAX(EL.event_time)
group by EL.enduser_acnt

but I get an error on the group by. The pertinent tables sections are:

table event_log
   event_time  TIMESTAMP
   enduser_acnt  int

table enduser
   enduser_acnt   int
   last_visit     datetime

Any help appreciated. Thanks...
andy



--
Andy Wallace - CISData - IDX Slave
AIM: acmwallace   [EMAIL PROTECTED]

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]




--
Andy Wallace - CISData - IDX Slave
AIM: acmwallace   [EMAIL PROTECTED]



--
Andy Wallace - CISData - IDX Slave
AIM: acmwallace   [EMAIL PROTECTED]

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to