一千萬個為什麽

搜索

使用快速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秒。

最佳答案

好的,這是一個返回你想要的查詢(至少,我認為你想要的),但它的任何東西,但快速和有效,所以首先嘗試:

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

轉載註明原文: 使用快速MySQL查詢查找組中的上一個和上一個值