Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL otrzymuje rangę zduplikowanych wartości na podstawie dat ich utworzenia

select
t.*,
@rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,
@prevDate := create_date
from
your_table t 
, (select @rank := 0, @prevDate := null) var_init
order by create_date, id

Wyjaśnienie:

Tutaj

, (select @rank := 0, @prevDate := null) var_init

zmienne są inicjowane. To tak samo jak pisanie

set @rank = 0;
set @prevDate = null;
select ... /*without the crossjoin*/;

Wtedy ważna jest kolejność kolumn w klauzuli select. Najpierw sprawdzamy tą linią

@rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,

jeśli bieżący wiersz ma taką samą datę jak poprzedni wiersz. @prevDate przechowuje wartość poprzedniego wiersza. Jeśli tak, @rank zmienna pozostaje taka sama, jeśli nie jest zwiększana.

W następnym wierszu

@prevDate := create_date

ustawiamy @prevDate zmienna na wartość bieżącego wiersza. Dlatego kolejność kolumn w select klauzula jest ważna.

Wreszcie, ponieważ sprawdzamy w poprzednim wierszu, jeśli daty się różnią, order by klauzula jest ważna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie MySQL Not IN nagle przestało zwracać wyniki

  2. Jak ustawić zestaw znaków i sortowanie kolumny w MySQL?

  3. Wydajny sposób na wyświetlenie kluczy obcych dla tabeli MySQL?

  4. MySQL - Spraw, aby para wartości była unikalna

  5. Wydajność MySQL:Konwersja MySQL do MariaDB