0

私は次の表を持っています

 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;

channel_idごとに、取得時間が最大の行を検索し、値をNULLに、ステータスをNULLに変更し、0に接続したいと思います。これは可能ですか?マニュアルには、サブクエリでテーブルを更新して同じテーブルから選択することはできないと記載されています...

お時間をいただきありがとうございます。

4

2 に答える 2

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
于 2011-04-19T03:11:49.903 に答える
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
于 2011-04-19T03:15:01.620 に答える