我有一张这样的表
CREATE TABLE `filelog` (
`date_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`file` varchar(200) DEFAULT NULL,
`action` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
操作可以包含值'upload'和'delete'
我有一个列表视图,其中显示上传的文件以供删除。问题是可以删除同一个文件并再次上传多次,这是一个日志表,其中插入了所有这些操作。因此,查询应显示带有操作“上传”的文件,其中最近的操作“删除”发生在“上传”操作之前。
答案 0 :(得分:1)
听起来您的要求在逻辑上等同于
“显示每个给定文件的最新条目IFF最近的条目是上传”
这是对的吗?如果是的话......
SELECT F1.*
FROM filelog F1
WHERE F1.action = 'upload' AND F1.date_time =
SELECT max(F2.date_time)
FROM filelog F2
WHERE F2.file = F1.file
如果从来没有删除权,你仍然想要它吗?
答案 1 :(得分:0)
试试这个:
SELECT *
FROM filelog f
JOIN (SELECT FILE,
max(date_time)
FROM filelog
WHERE ACTION = 'delete'
GROUP BY FILE) d
ON d.FILE = f.FILE
AND d.date_time < f.date_time
WHERE ACTION = 'update'
这将读取派生表中文件的最新删除。并用这些加入外表。
你需要索引