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

问题描述 投票:0回答:1

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

亲切的问候菲利普

sqlite
1个回答
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
);
© www.soinside.com 2019 - 2024. All rights reserved.