2011-04-19 23 views
0

我有以下表MySQL的更新GroupWise的最大

CREATE TABLE `data` (
`acquire_time` decimal(26,6) NOT NULL, 
`sample_time` decimal(26,6) NOT NULL, 
`channel_id` mediumint(8) unsigned NOT NULL, 
`value` varchar(40) DEFAULT NULL, 
`status` tinyint(3) unsigned DEFAULT NULL, 
`connected` tinyint(1) unsigned NOT NULL, 
PRIMARY KEY (`channel_id`,`acquire_time`), 
UNIQUE KEY `index` (`channel_id`,`sample_time`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

对于每一个频道了,我想找到的最大的获取时间和变化值设置为NULL,状态为NULL的行和连接到0。这是可能?手册说,你不能更新表,并在子查询中从同一个表中选择...

谢谢您的时间。

回答

0
update data join 
(
    select channel_id, max(acquire_time) acquire_time 
    from data 
    group by channel_id 
) x on x.channel_id = data.channel_id and x.acquire_time = data.acquire_time 
set 
    value = null, 
    status = null, 
    connected = 0 
+0

这似乎工作,谢谢! – Patrick 2011-04-19 17:34:43

0

试试这个。

update data data_1 
set value = null, status = null 
where not exists (
    select 1 
    from data data_2 
    where data_2.channel_id = data_1.channel_id 
    and data_2.acquire_time > data_1.acquire_time 
) 

如果不行,试试这个:

update data as data_1 
left join data as data_2 
on data_2.channel_id = data_1.channel_id 
and data_2.acquire_time > data_1.acquire_time 
set data_1.value = null, data_1.status = null 
where data_2.acquire_time is null 
+0

第一个给出了:你不能指定目标表“_1”的更新在FROM子句。 – Patrick 2011-04-19 17:32:29

+0

谢谢你的帮助!对不起,我拿了理查德,这对我来说有点清晰,但我认为这里的第二个也适用。 – Patrick 2011-04-19 17:36:15