Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL получава ранг на дублиращи се стойности въз основа на датите им на създаване

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

Обяснение:

Тук

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

променливите се инициализират. Това е същото като писането

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

Тогава редът на колоните в клаузата за избор е важен. Първо проверяваме с този ред

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

ако текущият ред има същата дата като предишния ред. @prevDate съдържа стойността на предишния ред. Ако да, @rank променливата остава същата, ако не, тя се увеличава.

В следващия ред

@prevDate := create_date

задаваме @prevDate променлива към стойността на текущия ред. Ето защо редът на колоните в select клаузата е важна.

И накрая, тъй като проверяваме с предишния ред, ако датите се различават, order by клаузата е важна.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Opencart 2.2.0 позволява търсене по производител

  2. Пребройте редовете в базата данни на mysql, където времевата марка в интервала X

  3. Променливата получава NULL след изчисления в MySQL Trigger

  4. Не може да се извлекат данни от базата данни към маркера на скрипта, докато се използва графика

  5. задаване на целевата версия на базата данни за миграция на mysql Workbench