我有一个包含 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/