选择外键的唯一行和最后一个时间戳



我有一个数据库,其中包含一个具有以下模式的表:

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

最新更新