Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL nhận thứ hạng của các giá trị trùng lặp dựa trên ngày tạo của chúng

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

Giải thích:

Đây

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

các biến không được sinh ra. Nó cũng giống như viết

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

Khi đó, thứ tự của các cột trong mệnh đề select là quan trọng. Đầu tiên, chúng tôi kiểm tra dòng này

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

nếu hàng hiện tại có cùng ngày với hàng trước đó. @PrevDate giữ giá trị của hàng trước đó. Nếu có, @rank biến vẫn giữ nguyên, nếu không, nó sẽ tăng lên.

Trong dòng tiếp theo

@prevDate := create_date

chúng tôi đặt @prevDate biến thành giá trị của hàng hiện tại. Đó là lý do tại sao thứ tự của các cột trong select mệnh đề quan trọng.

Cuối cùng, vì chúng tôi đang kiểm tra với hàng trước, nếu ngày khác nhau, hãy đặt order by mệnh đề quan trọng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để hiển thị nhiều cột xếp chồng cho mỗi phạm vi ngày trong một Thanh xếp chồng

  2. Ứng dụng web dựa trên MySQL:Cách dễ nhất để người dùng chọn đơn hàng hoặc mặt hàng?

  3. Trong MySQL, tôi có thể trả lại các hàng đã xóa sau khi xóa không?

  4. Có thể tạo tệp hạt giống quỳ từ một kết xuất cơ sở dữ liệu không?

  5. Làm cách nào để bạn nối một ký tự xuống dòng với một giá trị trong MySQL?