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

ऑडिट तालिका का उपयोग करते समय क्वेरी सहायता

मान लें कि ऑडिट तालिका भी lease_period को लॉग करती है प्राथमिक कुंजी कॉलम, यहां संदर्भित lp_id सरलता के लिए, आप निम्न उपाय आजमा सकते हैं:

  1. वे सभी पंक्तियाँ खोजें जहाँ audit_type 'Updated'

  2. सभी पंक्तियों को audit_date . के अनुसार रैंक करें और उन्हें lp_id . द्वारा विभाजित करना ।

  3. पंक्तियों को audit_date by के अनुसार रैंक करें lp_id, suite_id, lease_id, building_id . द्वारा विभाजन ।

  4. दो रैंकिंग के बीच अंतर प्राप्त करें।

  5. audit_date . के अनुसार पंक्तियों को फिर से रैंक करें , उन्हें अब lp_id, suite_id, lease_id, building_id, (ranking_difference) के आधार पर विभाजित करना ।

  6. उन सभी पंक्तियों को आउटपुट करें जहां अंतिम रैंकिंग मान 2 या अधिक है।

पहले चार चरणों का परिणाम एक पंक्ति सेट में होता है जहां लगातार प्रत्येक समूह (audit_date के आरोही क्रम में) ) suite_id, lease_id, building_id . के समान मानों वाली पंक्तियाँ उसी के लिए lp_id रैंकिंग #2 और #3 के बीच के अंतर के रूप में परिकलित मान द्वारा विशिष्ट रूप से अलग किया जाएगा।

समूह के भीतर, प्रत्येक पंक्ति, दूसरी पंक्ति से शुरू होकर, पिछली पंक्ति से केवल tenant_trading_name के मान में भिन्न होगी। , जो बस हमें चाहिए। इसलिए, हम पंक्तियों को एक बार फिर से रैंक करते हैं, हमारे द्वारा अभी प्राप्त 'ग्रुप आईडी' को ध्यान में रखते हुए, फिर प्रत्येक पंक्ति को 2 या उच्चतर की रैंकिंग के साथ लौटाते हैं।

यहाँ एक अनुमानित कार्यान्वयन है:

WITH marked AS (
  SELECT
    *,
    grp = ROW_NUMBER() OVER (PARTITION BY lp_id
                                 ORDER BY audit_date)
        - ROW_NUMBER() OVER (PARTITION BY lp_id, suite_id, lease_id, building_id
                                 ORDER BY audit_date)
  FROM lease_period_audit
  WHERE audit_type = 'Updated'
),
ranked AS (
  SELECT
    *,
    rnk = ROW_NUMBER() OVER (PARTITION BY lp_id, suite_id, lease_id, building_id, grp
                                 ORDER BY audit_date)
  FROM marked
)
SELECT
  audit_date,
  lp_id,
  tenant_trading_name,
  suite_id,
  lease_id,
  building_id
FROM ranked
WHERE rnk = 2

टिप्पणी। यह मानता है कि ऑडिट तालिका केवल वास्तविक परिवर्तनों को लॉग करती है, यानी एक ही प्राथमिक कुंजी के साथ लगातार दो पंक्तियाँ नहीं हो सकती हैं जहाँ सभी चार स्तंभों का मान समान हो।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या मैं SQL सर्वर के विरुद्ध कुछ उपयोगकर्ताओं को प्रमाणित करने के लिए ADFS 2.0 का उपयोग कर सकता हूँ?

  2. मैं डुप्लिकेट पंक्तियों को कैसे हटा सकता हूं?

  3. क्या मैं प्राथमिक कुंजी के लिए अनदेखा_dup_key चालू कर सकता हूं?

  4. SQL सर्वर के साथ एकल तालिका में शामिल होकर मैं सारांश कैसे बना सकता हूँ?

  5. प्रोग्राम के रूप में एसक्यूएल कोड जनरेट कर रहा है