所以我有一些数据:
'38078','4064','48','0','48','0','0','0','0','0','0','0' ,'0','0','0','0','0','2014-09-01 00:00:52'
对应于列:
(rowid,feed_rowid,feed_scans,feed_changed,feed_unchanged,feed_failures,url_dups, 页面,排除,相关,空,不可解决,无关,外语, 损坏,重复,空旷,日期)
其中第二列是id,对于此id,将有来自多个日期的数据,其中date是最后一列。
我想要做的是在一个日期范围内汇总id的所有数据,然后将汇总的数据作为一行添加到数据库中。同时我需要删除我刚刚选择用于求和的所有旧数据,但我不知道如何。
例如我有查询:
INSERT INTO crawlstats.feeds_stats
(feed_rowid,feed_scans,feed_changed,feed_unchanged,feed_failures,url_dups, 页面,排除,相关,空,不可解决,无关,外语, 损坏,重复,空旷,日期)
(选择feed_rowid,sum(feed_scans)作为feed_scans,sum(feed_changed)作为feed_changed, sum(feed_unchanged)为feed_unchanged,sum(feed_failures)为feed_failures,sum(url_dups)为url_dups, sum(pages)as pages,sum(excluded)as excluded,sum(related)as relevant,sum(empty)as empty, sum(unparsable)as notarsable,sum(不相关)as irrelevant,sum(foreignlanguage)as foreignlanguage, sum(损坏)为已损坏,sum(重复)为副本,sum(emptyparsed)为emptyparsed,date('2014-09-01')为date FROM crawlstats.feeds_stats,其中feed_rowid = 4784,日期>'2014-08-01'和日期< '2014年9月1日')
所以我想删除我在这一个查询的最后一部分中刚刚选择的所有内容。我怎么能这样做?
答案 0 :(得分:0)
所以你有feed_RowID的X记录
添加一个在限制范围内的新记录。 因此,您需要排除具有最高RowID的行并删除所有其他行...
Delete from feed_Stats
where feed_rowid=4784
and date>'2014-08-01'
and date < '2014-09-01'
and RowID <> (Select max(rowID) where feed_RowID = 4784)
假设插入的ROWID是自动编号,因此插入的ROWID将始终为最大值。如果系统中有多个用户同时更新此feed_RowID,则可能会出现计时问题。如果这个问题包含在一个程序中并且全部包含在一个事务中,问题可能就会消失。
或者你可以让你的select返回rowID Last_insert_ID()并使用它来排除。对于example
DECLARE LID int;
SET LID = LAST_INSERT_ID();
所以你可以......
Delete from feed_Stats
where feed_rowid=4784
and date>'2014-08-01'
and date < '2014-09-01'
and RowID <> last_Insert_ID();