Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

इस क्वेरी से नवीनतम तिथि का चयन कैसे करें (मौजूदा तालिका में नहीं)?

मुझे लगता है कि यह ऐसा करता है।

select
  t_task.task_id,
  t_task.task_name,
  latest_action.act_date,
  IFNULL(t_act_d.act_name, 'Pending') as act_name
from
  t_task
  left outer join (
    select
      @row_num := IF(@prev_value=concat_ws('', t_act.task_id),@row_num+1, 1) as row_number,
      t_act.task_id,
      t_act.act_id,
      t_act.act_date,
      @prev_value := concat_ws('', t_act.task_id) as z
    from
      t_act,
      (select @row_num := 1) x,
      (select @prev_value := '') y
    order by
      t_act.task_id,
      t_act.act_date desc
  ) as latest_action on
    t_task.task_id = latest_action.task_id
  left outer join t_act_d on
    latest_action.act_id = t_act_d.act_id
where
  latest_action.row_number = 1 or
  latest_action.row_number is null
order by
  case when latest_action.act_date is null then '9999-01-01' else latest_action.act_date end

आपके द्वारा प्रदान किए गए डेटा के परिणाम हैं:

+---------+-----------------+------------+-----------+
| task_id | task_name       | act_date   | act_name  |
+---------+-----------------+------------+-----------+
| A1      | PC  Proc        | 2017-07-17 | Execution |
| A2      | Printer  Proc   | 2017-07-21 | Surveying |
| A3      | Stationery Proc | NULL       | Pending   |
+---------+-----------------+------------+-----------+

मैं टी-एसक्यूएल से अधिक परिचित हूं, जहां मैं row_number() विंडो फ़ंक्शन का उपयोग करता हूं। विचार यह है कि row_number फ़ील्ड प्रत्येक पंक्ति की रैंकिंग को इस संदर्भ में दिखाए कि क्या यह सबसे हाल का (मान 1), दूसरा सबसे हाल का (मान 2) आदि प्रत्येक कार्य के लिए कार्रवाई है। प्रत्येक कार्य के लिए नवीनतम क्रिया 1 की पंक्ति_संख्या के साथ समाप्त होती है, इसलिए आप इस latest_action से row_number =1 पर फ़िल्टर करके इन्हें प्राप्त कर सकते हैं। सबक्वेरी

क्योंकि latest_action सबक्वायरी एक बार समग्र रूप से चलती है, प्रति पंक्ति एक बार नहीं, यह एक प्रदर्शन हिट का अधिक नहीं है। दुर्भाग्य से, मैं यह वादा नहीं कर सकता कि संपूर्ण चर सेटिंग / वृद्धिशील चीज़ एक प्रदर्शन हिट नहीं है, यह पहली बार है जब मैंने MySQL में इस तर्क का उपयोग किया है, मुझे नहीं पता कि यह कितना प्रदर्शनकारी है।

T-SQL की row_number() कार्यक्षमता को पुन:पेश करने का तर्क यहाँ से आया: ROW_NUMBER() MySQL में




  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. जांचें कि MySQL तालिका मौजूद है या नहीं

  3. एक एकल SQL क्वेरी के भीतर कई मायने रखता है

  4. Parse_dates pd.read_sql_query के साथ कैसे काम करता है

  5. गतिशील jQuery प्रपत्र फ़ील्ड से mysql में पंक्तियों को जोड़ना