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

时间:2018-03-01 16:30:34

标签: sql sqlite

我有一个包含这些架构的表的数据库:

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查询来获取它?

4 个答案:

答案 0 :(得分:3)

您可以按照mould_id进行分组:

select *, max(timestamp) from register group by mould_id

答案 1 :(得分:1)

SELECT * FROM register WHERE mould_id = :mould_id ORDER_BY timestamp ASC LIMIT 1

答案 2 :(得分:1)

http://sqlfiddle.com/#!7/3ff366/6
首先,您可以通过mould_id对数据进行分组,然后选择最后一个时间戳(最大值) 然后从寄存器表中选择mould_id和timestamp对应的数据

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 

答案 3 :(得分:0)

我不确定SQL Lite是否支持该语法,但在postgreSQL中你会这样做:

SELECT DISTINCT ON (r.mould_id) * FROM register r ORDER BY r.mould_id, timestamp ASC