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

टी-एसक्यूएल - निकटतम तिथि से चयन करें और आईडी द्वारा समूहित करें

आप इसे आजमा सकते हैं।

DECLARE @Date DATE = '10/01/2010';

WITH cte AS
    (
    SELECT ID, LinkedID, ABS(DATEDIFF(DD, @date, DATE)) diff,
        ROW_NUMBER() OVER (PARTITION BY LinkedID ORDER BY ABS(DATEDIFF(DD, @date, DATE))) AS SEQUENCE
    FROM MyTable
    )

SELECT *
FROM cte
WHERE SEQUENCE = 1
ORDER BY ID
;

आपने यह नहीं बताया कि आप उस मामले को कैसे संभालना चाहते हैं जहां एक LinkedID समूह में एकाधिक पंक्तियां लक्ष्य तिथि के निकटतम प्रतिनिधित्व करती हैं। इस समाधान में केवल एक पंक्ति शामिल होगी और, इस मामले में आप गारंटी नहीं दे सकते कि एकाधिक मान्य मानों की कौन सी पंक्ति शामिल है।

यदि आप उन सभी पंक्तियों को शामिल करना चाहते हैं जो निकटतम मान का प्रतिनिधित्व करती हैं, तो आप क्वेरी में ROW_NUMBER() को RANK() से बदल सकते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. संग्रहीत कार्यविधि के लिए एक SqlParameter में दिनांक समय का उपयोग करना, प्रारूप त्रुटि

  2. SQL सर्वर में @@ TEXTSIZE क्या है?

  3. जांचें कि स्ट्रिंग में SQL में उच्चारण वर्ण हैं या नहीं?

  4. टेबल कॉलम से एक अद्वितीय बाधा कैसे छोड़ें?

  5. रजिस्ट्री के माध्यम से एसक्यूएल सर्वर इंस्टेंस का संस्करण और संस्करण कैसे खोजें