SQLite3:如果行存在,则incriment value ELSE插入新行

SQLite3:如果行存在,则incriment value ELSE插入新行,sqlite,Sqlite,下午好。我尝试通过一个请求来执行这样的场景:我有一个表,其中每小时输入一个值。如果最后一次下注的日期超过1小时,我想插入一个新条目,如果在一小时内,则增加值 例如: 新通知 +------------+-------------------+ | 50 |2020-08-06 **11:20:00**| +------------+-------------------+ => 需要: 但是IF-ELSE不支持SQLite 3.x 我试着做一些类似电表的事情使用两种说法: UP

下午好。我尝试通过一个请求来执行这样的场景:我有一个表,其中每小时输入一个值。如果最后一次下注的日期超过1小时,我想插入一个新条目,如果在一小时内,则增加值

例如:

新通知

+------------+-------------------+
|     50     |2020-08-06 **11:20:00**|
+------------+-------------------+
=>

需要:

但是IF-ELSE不支持SQLite 3.x

我试着做一些类似电表的事情

使用两种说法:

UPDATE energy_consumption 
SET consumption_tarif_1 = consumption_tarif_1 + 100 
WHERE date BETWEEN strftime('%Y-%m-%d %H:00:00', 'now') AND DATETIME('now')
AND EXISTS (
  SELECT * FROM energy_consumption 
  WHERE date BETWEEN strftime('%Y-%m-%d %H:00:00', 'now') AND DATETIME('now')
);

INSERT INTO energy_consumption (counter_type_id, consumption_tarif_1, consumption_tarif_2, consumption_tarif_3) 
SELECT 1, 100, 100, 100
WHERE NOT EXISTS (
  SELECT * FROM energy_consumption 
  WHERE date BETWEEN strftime('%Y-%m-%d %H:00:00', 'now') AND DATETIME('now')
);

其中只有1个将被执行,因为它们都包含相互排斥的条件,即EXISTS和notexists

这是一个很好的解决方案。非常感谢。一、 在这一刻,我也试着做点什么。现在,我坐下来测试不同的情况。插入能源消耗日期,计数器类型id,消耗量tarif\u 1值从能源消耗中选择日期,其中标准时间“%Y-%m-%d%H:00:00”,“now”,“1,23 ON CONFLICTdate更新设置计数器类型id=1,消耗量tarif\u 1=消耗量tarif\u 1+50;在我看来,如果存在唯一的约束冲突,您的解决方案似乎更灵活。
+------------+-------------------+
| value      | date              |
+------------+-------------------+
|     100    |2020-08-06 12:12:12|
+------------+-------------------+
|     150    |2020-08-06 **11:11:00**|
+---------------------------------
IF EXISTS (SELECT * FROM energy_consumption WHERE date BETWEEN strftime('%Y-%m-%d %H:00:00', 'now') AND DATETIME('now'))
    UPDATE energy_consumption SET consumption_tarif_1 = consumption_tarif_1 + 100 WHERE date BETWEEN strftime('%Y-%m-%d %H:00:00', 'now') AND DATETIME('now')
ELSE
    INSERT INTO energy_consumption (counter_type_id, consumption_tarif_1, consumption_tarif_2, consumption_tarif_3) VALUES(1, 100, 100, 100)

UPDATE energy_consumption 
SET consumption_tarif_1 = consumption_tarif_1 + 100 
WHERE date BETWEEN strftime('%Y-%m-%d %H:00:00', 'now') AND DATETIME('now')
AND EXISTS (
  SELECT * FROM energy_consumption 
  WHERE date BETWEEN strftime('%Y-%m-%d %H:00:00', 'now') AND DATETIME('now')
);

INSERT INTO energy_consumption (counter_type_id, consumption_tarif_1, consumption_tarif_2, consumption_tarif_3) 
SELECT 1, 100, 100, 100
WHERE NOT EXISTS (
  SELECT * FROM energy_consumption 
  WHERE date BETWEEN strftime('%Y-%m-%d %H:00:00', 'now') AND DATETIME('now')
);