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

MySQL - Získejte počítadlo pro každou duplicitní hodnotu

MySQL bohužel nemá funkce pro vytváření oken, což je to, co budete potřebovat. Takže budete muset použít něco takového:

Konečný dotaz

select data, group_row_number, overall_row_num
from
(
  select data,
        @num := if(@data = `data`, @num + 1, 1) as group_row_number,
        @data := `data` as dummy, overall_row_num
  from
  (
    select data, @rn:[email protected]+1 overall_row_num
    from yourtable, (SELECT @rn:=0) r
  ) x
  order by data, overall_row_num
) x
order by overall_row_num

viz SQL Fiddle s ukázkou

Vysvětlení:

Za prvé, vnitřní výběr, použije se falešné row_number na všechny záznamy ve vaší tabulce (viz SQL Fiddle s ukázkou ):

select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r

Druhá část dotazu porovnává každý řádek v tabulce s dalším, aby se zjistilo, zda má stejnou hodnotu, pokud ne, pak začíná group_row_number přes (viz SQL Fiddle s ukázkou ):

select data,
      @num := if(@data = `data`, @num + 1, 1) as group_row_number,
      @data := `data` as dummy, overall_row_num
from
(
  select data, @rn:[email protected]+1 overall_row_num
  from yourtable, (SELECT @rn:=0) r
) x
order by data, overall_row_num

Poslední výběr vrátí požadované hodnoty a vrátí je zpět v požadovaném pořadí:

select data, group_row_number, overall_row_num
from
(
  select data,
        @num := if(@data = `data`, @num + 1, 1) as group_row_number,
        @data := `data` as dummy, overall_row_num
  from
  (
    select data, @rn:[email protected]+1 overall_row_num
    from yourtable, (SELECT @rn:=0) r
  ) x
  order by data, overall_row_num
) x
order by overall_row_num


  1. Výkon rekurzivních uložených procedur v MYSQL pro získání hierarchických dat

  2. MYSQL zobrazuje nesprávné řádky při použití GROUP BY

  3. Správa oken v Oracle D2k Forms

  4. MySQL – Jak spustit více aktualizačních dotazů na jednom řádku?