sql >> Databáze >  >> RDS >> Mysql

Jak odstranit pouze nepřetržité duplikáty, ale ne všechny duplikáty ve výběrovém dotazu (MySQL)?

Chcete získat předchozí hodnotu. Pokud data opravdu nemají žádné mezery nebo duplikáty, udělejte to:

select t.*
from t left join
     t tprev
     on t.col1 = date_add(tprev.col1, interval 1 day)
where tprev.col2 is null or tprev.col2 <> t.col2;

EDIT:

Pokud data nesplňují tyto podmínky, můžete použít proměnné:

select t.*
from (select t.*,
             (@rn := if(@v = col2, @rn + 1,
                        if(@v := col2, 1, 1)
                       )
             ) as rn
      from t cross join
           (select @v := 0, @rn := 0) params
      order by t.col1
     ) t
where rn = 1;

Všimněte si, že MySQL nezaručuje pořadí vyhodnocení výrazů v SELECT . Proměnné by tedy neměly být přiřazeny v jednom výrazu a poté použity v jiném – měly by být přiřazeny v jediném výrazu.



  1. Správa zásob s opcemi na akcie

  2. V dotazu na regulární výraz MySQL se nerozlišují velká a malá písmena

  3. Indexy SQL Server:Klíčové požadavky, dopady na výkon a úvahy

  4. Vkládání dat SQL Server pomocí Oracle® SQL*Loader