MySQL / SQL:删除最低值的行

时间:2014-03-19 10:21:55

标签: mysql sql delete-row

只有更新值增加的表才会出现问题。

我的场景:

想象一下,你有一个像这样的结构数据库,它代表了按频道和设备划分的所有节目峰值观众价值。

每隔5分钟,您就会将新数据推送到此表中,

目标是仅更新程序的峰值视图增加的值

例如增加" event_peak_views"来自一个独特的" platform_id和channel_epg_id AND event_start"

我目前的做法是每隔5分钟快速插入新值,然后为任何给定程序选择最低峰值并删除它们。

必须有一个更好的方法,因为数据集相当大,数百万行,任何人都有比我自己的劣质方法更好的建议吗?

当前表格布局

`entry_id` INT(11) NOT NULL AUTO_INCREMENT,
`platform_id` INT(11) NOT NULL,
`channel_epg_id` INT(11) NOT NULL,
`event_start` DATETIME NOT NULL,
`event_peak_views` INT(11) NOT NULL,
`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`entry_id`),
INDEX `platform_id` (`platform_id`),
INDEX `channel_epg_id` (`channel_epg_id`),
INDEX `event_start` (`event_start`)

我的删除/选择最低值SQL

DELETE victim
FROM
    Livescrape_data_live_historical_events as victim,
    Livescrape_data_live_historical_events as comparsion
WHERE
    victim.entry_id<>comparsion.entry_id
    AND victim.event_start=comparsion.event_start
    AND victim.platform_id=comparsion.platform_id
    AND victim.channel_epg_id=comparsion.channel_epg_id
    AND (
        (victim.event_peak_views < comparsion.event_peak_views)
        OR (
            victim.event_peak_views = comparsion.event_peak_views
            AND victim.entry_id > comparsion.entry_id
        )
);

0 个答案:

没有答案