我有一个数据库,其中包含一个具有以下模式的表:
CREATE TABLE register (
register_id INTEGER NOT NULL,
mould_id VARCHAR,
timestamp INTEGER NOT NULL,
PRIMARY KEY (register_id),
FOREIGN KEY(mould_id) REFERENCES mould (mould_id)
)
时间戳是增量整数,因此时间戳越大意味着最近的时间越长。
我想为每个mould_id获取最后一个寄存器(最近/更大的时间戳(。是否可以使用 SQL 查询来获取此值?
您可以
按mould_id分组:
select *, max(timestamp) from register group by mould_id
SELECT * FROM register WHERE mould_id = :mould_id ORDER_BY timestamp ASC LIMIT 1
http://sqlfiddle.com/#!7/3ff366/6
首先,您可以按mould_id对数据进行分组,然后选择最后一个时间戳(最大值(。
然后从寄存器表中选择数据,其中mould_id和时间戳对应
SELECT *
FROM register r
JOIN ( SELECT mould_id
, MAX(timestamp) timestamp
FROM register
GROUP BY mould_id ) d ON r.mould_id = d.mould_id
AND r.timestamp = d.timestamp
我不确定SQL Lite是否支持该语法,但在postgreSQL中,您会这样做:
SELECT DISTINCT ON (r.mould_id) * FROM register r ORDER BY r.mould_id, timestamp ASC