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

चर initalized हैं। यह लिखने जैसा ही है

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. एक अद्यतन का उपयोग करके एकाधिक कॉलम सेट करना

  2. लैवरल 5 त्रुटि {(SQLSTATE [HY000] [1045] उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' के लिए प्रवेश निषेध (पासवर्ड का उपयोग करके:हाँ)}

  3. MySQL JDBC 08001 डेटाबेस कनेक्शन त्रुटि को कैसे ठीक करें

  4. mysqli फ़ेच () नहीं ला रहा है

  5. MYSQL सिंटैक्स मूल्यांकन नहीं NULL की उपस्थिति के बराबर नहीं है