我有一张类似的表:
LogId RefId Entered
==================================
1 1 2010-12-01
2 1 2010-12-04
3 2 2010-12-01
4 2 2010-12-06
5 3 2010-12-01
6 1 2010-12-10
7 3 2010-12-05
8 4 2010-12-01
这里,LogId是唯一的;对于每个RefId,有多个带时间戳的条目。我想要提取的是每个最新的RefId的LogId。
我尝试了以下链接的解决方案:http://stackoverflow.com/questions/121387/sql-fetch-the-row-which-has-the-max-value-for-a-column。但是,它返回具有相同RefId的多行。 LogId和RefId应该是唯一的。
有人可以帮我这个吗?
由于
Vamyip
答案 0 :(得分:3)
您需要使用一个子查询来提取每个RefId的最新输入值,然后将您的源表连接到RefId,输入:
SELECT DISTINCT MyTable.LogId, MyTable.Entered FROM MyTable
INNER JOIN (SELECT RefId, MAX(Entered) as Entered FROM MyTable GROUP BY RefId) Latest
ON MyTable.RefId = Latest.RefId AND MyTable.Entered = Latest.Entered
答案 1 :(得分:0)
由于它显示自动增加日志ID,因此它们将按顺序标记日期/时间。因此,通过获取每个参考ID的最后一个LogID,您将在下面的“PreQuery”中获得“最新”,然后根据该单个ID加入原始表以获取实际日期戳信息(或其他详细信息) )你需要从实际的日志。
select PreQuery.RefID,
PreQuery.LastLogEntry,
L.Entered
from
( select RefID,
Max( LogID ) LastLogEntry
from
YourLog
group by
RefID ) PreQuery,
YourLog L
where
PreQuery.LastLogEntry = L.LogID
答案 2 :(得分:0)
正确处理重复项:
SELECT m.*
FROM (
SELECT DISTINCT refid
FROM mytable
) md
JOIN mytable m
ON m.LogID =
(
SELECT LogID
FROM mytable mi
WHERE mi.refid = md.refid
ORDER BY
mi.refid DESC, mi.entered DESC, mi.logid DESC
LIMIT 1
)
在mytable (refid, entered, logid)
上创建一个索引,以便快速工作。