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

TSQL जाँच करें कि क्या विशिष्ट पंक्तियाँ अनुक्रम मौजूद हैं

मुझे लगता है कि इसे एक पुनरावर्ती CTE का उपयोग करके हल किया जा सकता है:

with change_tree as 
(
  SELECT order_id,
         previous_status_id, 
         next_status_id,
         cast(next_status_id as varchar(max)) as status_path
  FROM status_change
  WHERE previous_status_id = 1
    AND order_id = 2

  UNION ALL 

  SELECT sc.order_id,
         sc.previous_status_id,
         sc.next_status_id,
         ct.status_path + ',' + cast(sc.next_status_id as varchar(max))
  FROM status_change sc 
    JOIN change_tree ct ON ct.next_status_id = sc.previous_status_id AND ct.order_id = sc.order_id
)
SELECT *
FROM change_tree
WHERE status_path = '2,3,5';

यह अनिवार्य रूप से क्या करता है (पुनरावर्ती रूप से) next_status_id के सभी मानों को एक एकल स्ट्रिंग में संयोजित करना है जिससे आप तुलना कर सकते हैं।

आपके नमूना डेटा से मुझे यह स्पष्ट नहीं है कि कौन सी पंक्ति किसी ऑर्डर स्थिति परिवर्तन इतिहास की "शुरुआत" को चिह्नित करती है। सही "शुरुआती" पंक्ति का चयन करने के लिए आपको संघ के पहले भाग में कहाँ समायोजित करना होगा।



  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. मैं TIMESTAMP कॉलम से दिनांक/समय की जानकारी कैसे प्राप्त करूं?

  3. पहली पंक्ति में कैसे जुड़ें

  4. SQL सर्वर:dateiff फ़ंक्शन के परिणामस्वरूप MILLISECOND का उपयोग करते समय अतिप्रवाह हुआ

  5. अलग-अलग सॉफ़्टवेयर संस्करणों के लिए अलग-अलग फ़ाइलों के लिए अलग-अलग मानों का योग प्राप्त करने का प्रयास कर रहा है