我可以得到我需要的结果,但我需要快速查询。
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秒。
答案 0 :(得分:0)
好的,这是一个返回你想要的东西(至少,我认为你想要的东西),但它的任何东西都快速有效,所以先尝试一下:
SELECT A.*,
(SELECT TOP 1 id FROM YourTable WHERE fid = A.fid AND id < B.MaxId ORDER BY id DESC) Id2,
(SELECT TOP 1 value1 FROM YourTable WHERE fid = A.fid AND id < B.MaxId ORDER BY id DESC) previous_value1
FROM YourTable A
INNER JOIN (SELECT fid, MAX(id) Maxid
FROM YourTable
GROUP BY fid) B
ON A.id = B.Maxid
ORDER BY A.fid