我可以得到我需要的结果,但我需要一个快速查询。使用快速MySQL查询查找组中的最后一个值和以前的值
id value1 fid
1000 1203 5
1001 1293 1
1002 1203 3
1003 1211 1
1004 1263 1
1005 1223 5
1006 1243 2
1007 123 5
1008 1049 2
1009 1205 3
这里有我需要的结果:
fid id value1 id2 previous_value1
1 1004 1263 1003 1211
2 1008 1049 1006 1243
3 1009 1205 1002 1203
5 1007 123 1005 1223
任何想法?
编辑:我忘了写我的查询,这里是我的查询:
SELECT
t1.fid,
t1.id,
t1.value1,
t2.id AS id2,
t2.value1 AS previous_value1
FROM
(
SELECT
MAX(id) AS id
FROM TABLENAME
GROUP BY fid
) t3
INNER JOIN TABLENAME t1 ON t1.id = t3.id
INNER JOIN TABLENAME t2 ON t2.id = (SELECT id FROM TABLENAME WHERE id < t1.id AND fid = t1.fid ORDER BY id DESC LIMIT 1)
其实我通过去除多余的列简化它。
(有一个在WHERE语句2个列,但它没有问题。)
原来的查询需要〜0.04秒。如果我用where语句中的其他两列过滤结果,则需要大约0.001秒。
系统,您的问题,请 – JellyBelly
这是一种曼萨难题来猜测这个问题吗? –
@Jet Php这个问题,正如所写的,非常多的问题是“我明白了,现在让我们看看你能不能”,我敢肯定这不是你要找的语气。向我们展示您的解决方案会很有帮助,并让我们建议对* it *进行改进。谢谢。 :) –