我的系统中有以下审核表:
+---+----------------+-------------+----------------+-----------------------+-----------+
|ID |field |checkpoint |value1 |value2 |created_by |
+---+----------------+-------------+----------------+-----------------------+-----------+
|1 |active |0 |null |1 |user1 |
|2 |person |0 |null |jonh |user1 |
|4 |duration |2 |01.01.1970 0:00 |01.01.1970 0:07 |user1 |
|2 |field_update |1 |0 |1 |user2 |
|1 |opened_by |1 |null |sam |user1 |
|2 |work_note |2 |null |TEST |user2 |
+---+----------------+-------------+----------------+-----------------------+-----------+
具有相同ID的值是指一个实体。此审计表跟踪一个实体内的所有更改。所以我需要抓住以下实体: 当field ='person'和value2 ='john'时,我需要获得该实体的下一次更新(ID)。在表上看它是第4行(相同的ID和检查点=检查点+ 1)。因此,我们需要通过此ID和created_by字段计算具有所述条件的所有ID。
答案 0 :(得分:0)
怎么样?
SELECT *
FROM mytable a
INNER JOIN mytable b ON a.ID = b.ID
WHERE a.field = 'person'
AND a.value2 = 'john'
AND b.checkpoint = a.checkpoint + 1
答案 1 :(得分:0)
你想要这个吗?
Select count(id) from audit where id = (select id from audit
group by id
having count(distinct checkpoint)=max(checkpoint) and min(checkpoint)=1
where field = 'person' AND value2 = 'john')