0

我有一个表格来跟踪客户的使用情况,一个包含列的简化结构idvoice_activity. id是索引,voice_activity需要一个日期,MM-DD-YYYY该日期指示上次显示使用的时间。

我需要处理运行良好的大型日志文件(CSV 最多 200k 行),问题是有效地更新activity字段。它目前仅通过构建一个查询来工作,例如:

UPDATE users SET voice_activity = '09-24-2013' WHERE id = 1 OR id = 2 OR id = 3

等等等等。这很好用,只要日志文件按时间顺序添加。如果在较新的日志文件之后添加前一天的日志文件,则 SQL 查询将覆盖较新的日期。因此,查询需要考虑该字段voice_activity是否大于我们要插入的日期,如果是,请不要打扰。

我知道这应该可以通过CASE但无法理解语法。如果这种方式不可能,还有什么其他有效的方法来更新这个表?我不希望循环中的 SQL 更新,因为它会融化。

4

3 回答 3

1
UPDATE users SET voice_activity = '09-24-2013' WHERE id in(1,2,3) and voice_activity >'09-24-2013'

或者

UPDATE users SET voice_activity = '09-24-2013' WHERE (id=1 or id=2 or id=3)  and voice_activity >'09-24-2013'
于 2013-09-24T12:42:22.670 回答
1

如果我正确理解了您的问题,您可以使用以下内容:voice_activity仅当新日期大于当前值时才会更新列。

还要注意使用IN以避免过多的 OR

UPDATE users SET voice_activity = '09-24-2013' WHERE id IN (1, 2, 3) and voice_activity<'09-24-2013'
于 2013-09-24T12:43:49.490 回答
0

或者如果你真的想使用 CASE,虽然没有必要:

UPDATE users SET voice_activity = (CASE WHEN voice_activity < '09-24-2013' THEN '09-24-2013' ELSE voice_activity END) WHERE id = 1 OR id = 2 OR id = 3
于 2013-09-24T12:46:03.577 回答