SQLite:仅当价格与最后一行不同时插入

标签 sqlite

我有一个包含 2 列的 SQLite 简单表:

timestamp |last_price
1419873093|900.0
1419874283|900.0
1419940915|900.0
1419946324|916.58
1419946981|914.46
1419947981|800.0

仅当价格与最后一行价格不同时,我才想插入新值(我不希望连续价格相同)。我可以使用以下方法获取最后一行的价格:

SELECT last_price FROM BTC_BRL order by rowid desc limit 1;

然后我将其与新价格进行比较,但如果我可以直接在 SQL 语句中执行此操作,会更好更快。

我尝试使用 CASE WHEN,但没有成功。

谢谢!

最佳答案

好的,这是解决方案:

解决方案是使用 VIEW 和 TRIGGER:

1)首先我们创建一个包含最后一行的 View :

CREATE VIEW [BTC_BRL-VIEW] AS SELECT timestamp,last_price
FROM [BTC_BRL] order by rowid desc limit 1;

2) 然后我们使用 INSTEAD OF 创建一个触发器:

CREATE TRIGGER [BTC_BRL-TRIGGER] INSTEAD OF INSERT 
ON [BTC_BRL-VIEW]

WHEN new.last_price NOT IN (SELECT last_price FROM 
[BTC_BRL-VIEW])

BEGIN INSERT INTO [BTC_BRL] values(new.timestamp,new.last_price);
END;

3)最后我们可以插入:

INSERT INTO [BTC_BRL-VIEW] values(1419991328,925.47);

就是这样!仅当最后价格与last_price(来自VIEW)不同时,它才会插入。我希望它也对其他人有帮助;)

关于SQLite:仅当价格与最后一行不同时插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711987/

相关文章:

java - Sqlite Insert运行成功但对数据库没有任何影响?

sqlite - Mono + SQLite + Dapper SQLite 插入期间出现异常

android - 从 txt 填充数据库的替代方法

mysql - SQLite 和 MySQL 之间的差异 - 登录和安全性

java - 我收到错误隐式 super 构造函数 SQLiteOpenHelper()

objective-c - 西类牙语 unicode 字符 SQLite

iphone - Firefox SQLite Manager无法访问Xcode iPhone模拟器SQLite DB目录

c - 性能比较 : Sqlite SELECT f FROM t WHERE rowid = %q VS. 标准。 C Fopen + Fseek

android - 在上传到 android 中的 playstore 之前管理数据库

c# - 使用带有 lambda 表达式的 db 获取数据并合并