Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用快速MySQL查询查找组中的上一个值和上一个值_Mysql_Sql_Group By - Fatal编程技术网

使用快速MySQL查询查找组中的上一个值和上一个值

使用快速MySQL查询查找组中的上一个值和上一个值,mysql,sql,group-by,Mysql,Sql,Group By,我可以得到我需要的结果,但我需要一个快速查询 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

我可以得到我需要的结果,但我需要一个快速查询

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语句中还有两列,但这并不重要


原始查询大约需要0.04秒。如果我使用where语句中的其他两列过滤结果,则需要约0.001秒。

好的,这里有一个查询,它至少返回您想要的内容,我认为您想要的内容,但它不是快速高效的,所以请先尝试一下:

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

这是一个门萨谜题吗?@Jet-Php这个问题,正如我所写的,在我理解它的时候,非常顺利,现在让我们看看你是否可以,我相信这不是你想要的语气。向我们展示您的解决方案会很有帮助,让我们提出改进建议。谢谢我认为MySQL还不支持窗口化。对这个查询来说太糟糕了。@djacobson对不起,我忘记写我自己的查询了。但很明显,我使用分组和比较ID。我想知道是否还有其他先进的方法。如果我找到了先进的方法,我为什么要问你是否可以。这不是一个竞赛网站。嗨,拉马克,谢谢你的回复。我对你们的建议使用了类似的查询,但我想知道是否有一种快速技术。我最终复制了这个表。当超过时,通过删除,每个组最多可保存10行。这样做可以保证原始表增长时的速度,因为该模块不需要旧记录。