2017-10-21 46 views
-1

我有兩個簡單的列的表,因爲這小提琴Sql fiddlermysql命令由兩列奇標準

我想這個命令:

id rev 
    ========== 
    1  1 
    2  3 
    6  3 
    3  1 
    4  2 
    10  2 
    5  1 
    7  1 
    8  1 
    9  1 

我想爲了通過與塔「身份證」,但如果'id'= 2,則下一個必須是具有相同'rev'值的'id'。

有可能嗎?

[編輯]對不起,我修改了小提琴手......

[編輯25/10] 我試圖編輯我的查詢與@ P.Salmon回答時第一個表的ID是「militare」。 但有一個錯誤

1054 - 在「字段列表」未知列「轉」

SELECT 
    `militari`.`ordine` militare, 
    `ordini_servizio_dati`.`id_pattuglia` rev, 
    `ordini_servizio_dati`.`oggetto_servizio`, 
    `ordini_servizio_dati`.`luogo`, 
    `ordini_servizio_dati`.`orario`, 
    `ordini_servizio_dati`.`aut_orario`, 
    `ordini_servizio_dati`.`siris` 
FROM 
    `ordini_servizio_inizializzati`, 
    (
     select 
      militare, 
      rev, 
      if(rev <> @p, @rn := 1, @rn := @rn + 1) rn, 
      if(
       rev <> @p, @min := militare, @min := @min 
      ) minid, 
      @p := rev p 
     from 
      `ordini_servizio_dati`, 
      (
       select 
        @min := 0, 
        @rn := 0, 
        @p := 0 
      ) r 
     order by 
      rev, 
      militare 
    ) s 
    LEFT JOIN `schedario`.`ordini_servizio_dati` ON `ordini_servizio_inizializzati`.`id` = `ordini_servizio_dati`.`id_ordine` 
    LEFT JOIN `schedario`.`militari` ON `ordini_servizio_dati`.`militare` = `militari`.`matricola` 
WHERE 
    (
     `ordini_servizio_inizializzati`.`id` = '1' 
    ) 
order by 
    case when rev = 1 then militare else minid end, 
    rn 
+0

有什麼邏輯呢? –

+0

你能解釋一下這個命令嗎?我看不到'ORDER BY'的規則! –

+2

_「我會這樣的命令:」_ - 基於_what_?如果你根本不解釋這個命令是基於什麼的話,單獨提供一個sqlfiddle是無濟於事的。另外,小提琴中的「rev」列包含三個「2」,並且只有一個「3」。甚至連'id'和'rev'之間的關聯都沒有和你預期的輸出結果一樣...? – CBroe

回答

1

您的邏輯是沒有意義的給您的數據和你說的我會預計這樣的

+----+-----+ 
| id | rev | 
+----+-----+ 
| 1 | 1 | 
| 3 | 1 | 
| 5 | 1 | 
| 7 | 1 | 
| 8 | 1 | 
| 9 | 1 | 
| 2 | 3 | 
| 6 | 3 | 
| 4 | 2 | 
| 10 | 2 | 
+----+-----+ 
10 rows in set (0.03 sec) 

,或者如果你把轉1作爲一個特殊的情況下,你可以

輸出210
select id,rev 
     #case when rev = 1 then id 
     #else minid 
     #end as overwrite 
from 
(
select id,rev, 
     if(rev<>@p,@rn:=1,@rn:[email protected]+1) rn, 
     if(rev<>@p,@min:=id,@min:[email protected]) minid, 
     @p:=rev p 
from docs, (select @min:=0, @rn:=0,@p:=0) r 
order by rev,id 
) s 
order by  case when rev = 1 then id 
     else minid 
     end , 
      rn 

結果

+----+-----+ 
| id | rev | 
+----+-----+ 
| 1 | 1 | 
| 2 | 3 | 
| 6 | 3 | 
| 3 | 1 | 
| 4 | 2 | 
| 10 | 2 | 
| 5 | 1 | 
| 7 | 1 | 
| 8 | 1 | 
| 9 | 1 | 
+----+-----+ 
10 rows in set (0.03 sec) 
+0

如果我在這裏問這是因爲我不能。我想要'id'專欄排序,但與我的標準。我不明白,如果這是我的英語的不安全或什麼... – Gian76

+0

沒有明確的規則來獲得你想要的結果,你已經說明我想通過'id'列來訂購,但是如果'id' = 2,那麼下一個必須是具有相同'rev'值的'id',但似乎也適用於rev 1和3,並且沒有明顯的理由讓rev 1和rev 3的行爲與rev 2有所不同。這不是關於代碼的評論純粹是關於邏輯。 –

+1

請參閱編輯第1版被視爲特殊情況。 –