为每个组选择最后一次更改行SQLITE

时间:2017-12-20 16:27:47

标签: sqlite

我有4张汽车注册表和每张汽车的一些数据 我需要为SQLite的每次注册选择最新更改的行,你能帮助我吗?

亲切的问候 菲利普

1 个答案:

答案 0 :(得分:0)

如果您在当前连接打开时进行了最新更改,则可以使用last_insert_rowid()函数进行插入,或使用whereClause进行更新,如this post.中所述

如果您已经关闭了连接,或者想要在进行更改后的任何时间选择最新更改的行,则必须使数据库记住最后更改了哪一行。以下是使用时间戳的示例:

让我们考虑以下架构。

CREATE TABLE car (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  content TEXT,
  last_change TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

现在,last_change将被设置为插入新行时的创建时间。

我们仍然需要在每个UPDATE查询上更新last_change,所以让我们为它创建一个触发器。

CREATE TRIGGER update_last_change
  AFTER UPDATE
  ON car
  BEGIN
    UPDATE car SET last_change = CURRENT_TIMESTAMP WHERE id = NEW.id;
  END;

您可以使用以下查询来获取具有最新更改的行。

SELECT * FROM car ORDER BY last_change DESC LIMIT 1;

这将始终返回最多一行。可以有多个具有相同last_change的行。如果您希望在这种情况下所有行都包含最新的last_change,请使用以下查询。

SELECT * FROM car WHERE last_change = (
  SELECT last_change FROM car ORDER BY last_change DESC LIMIT 1
);