我想获得一个由最近更改的FID排序的唯一FID列表。在此示例表中,它应按150, 194, 122
ID FID changeDate
----------------------------------------------
1 194 2010-04-01
2 122 2010-04-02
3 194 2010-04-03
4 150 2010-04-04
我认为不同并且顺序会做的伎俩。我最初尝试过:
SELECT distinct `FID` FROM `tblHistory` WHERE 1 ORDER BY changeDate desc
# Returns 150, 122, 194
使用GROUP BY
具有相同的结果。我只是一个SQL爱好者,而且我有点挂了。似乎正在发生的是聚合函数找到每个函数的第一个匹配项,然后执行排序。
有没有办法可以直接从mySQL获得我想要的结果,还是我必须抓取所有数据然后在PHP中对其进行排序?
答案 0 :(得分:1)
这对我有用:
SELECT FID
FROM tblHistory
GROUP BY FID
ORDER BY MAX(changeDate) DESC;
答案 1 :(得分:0)
好吧,自从我问过这个问题以来,我一直在网站上阅读问题,并提出了一个似乎有效的答案,尽管我希望其他人可能会以更简单的方式阐明:
SELECT t1.FID, t1.CD
FROM (
SELECT FID, max(changeDate) as CD
FROM sorted
GROUP BY FID
) as t1
WHERE 1
order by t1.CD desc
似乎能得到我期望的结果。直到几分钟之前我才知道子查询存在。我是一个真正的SQL新手。
答案 2 :(得分:0)
select * from tbl A
where changeDate =
(select max(changeDate) from tbl where tbl.fid = A.fid)
order by changeDate desc