我有一個包含以下列的表: id | fk_id | rcv_date按列分組的查詢結果的行號
可能有多個記錄具有常見的fk_id,它表示相關表中的外鍵標識。
我需要創建一個查詢,它將爲每條記錄分配一個行號,按fk_id分組,按rcv_date排序。
我最初開始用下面的查詢,這工作得很好進行排序和分配行號:
SELECT @row:[email protected] +1 AS ordinality, c.fk_id, rcv_date
FROM (SELECT @row:=0) r, mytable c
ORDER BY rcv_date
但是 - 行計數和排序是整個數據集進行。我需要計數在一個普通的fk_id內。例如,以下示例數據將返回(第一列表示行數/標準):
1 | 5 | 2011-10-01
2 | 5 | 2011-10-14
3 | 5 | 2011-11-02
4 | 5 | 2011-12-17
1 | 8 | 2011-09-03
2 | 8 | 2011-11-12
1 | 9 | 2011-10-08
2 | 9 | 2011-10-10
3 | 9 | 2011-11-19
中間一列代表fk_id。如您所見,排序和行計數在fk_id「分組」中。
UPDATE 我有一個似乎是工作的查詢,但想一些輸入它是否能加以改進:
SELECT IF(@last = c.fk_id, @row:[email protected] +1, @row:=1) AS ordinality, @last:=c.fk_id, c.fk_id, rcv_date
FROM (SELECT @row:=0) r, (SELECT @last:=0) l, mytable c
ORDER BY c.fk_id, rcv_date
那麼,這樣做是爲了通過fk_id然後rcv_date - - 基本上處理我的分組。然後我使用第二個變量來比較前一個記錄中的fk_id與當前記錄:如果相同,我們增加行;如果不同,我們重置爲1.
我對真實數據的測試似乎正在工作。我懷疑這是一個非常低效的查詢,所以如果任何人有改進它的想法,或者看到可能的缺陷,我很樂意聽到。
@Icdservices你不應該在同一個查詢中進行排序。它會破壞你辛苦賺來的金錢。首先在內部查詢中排序,然後按照我的解決方案進行排序 – nawfal