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

DISTINCT रिकॉर्ड प्राप्त करने के लिए TSQL और फिर पंक्ति संख्या लागू करें

मुझे लगता है कि यह वही है जो आप ढूंढ रहे हैं:आप पंक्ति संख्या वाली सभी पंक्तियां चाहते हैं जो अधिकतम सक्रियण तिथि नहीं हैं

DECLARE @tbl TABLE
(
    CustomerName    VARCHAR(20),
    ProductName     VARCHAR(20),
    KeyCode         INT,
    ActivationDate  DATETIME
)


INSERT INTO @tbl
SELECT 'cmp1', 'game', 28734, GETDATE() -1    UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE() -1.5  UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE() -1.2  UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE() -1.8  UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE()       UNION ALL
SELECT 'cmp1', 'game', 28734, GETDATE() -17   UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -1    UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -1.5  UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -1.2  UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -1.8  UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE()       UNION ALL
SELECT 'cmp2', 'game', 28736, GETDATE() -17     


SELECT        ROW_NUMBER() OVER(ORDER BY ActivationDate DESC) RowNumber,
              CustomerName, 
              ProductName, 
              KeyCode, 
              ActivationDate        
FROM @tbl workTable
WHERE ActivationDate != 
    (
        SELECT MAX(ActivationDate)
        FROM @tbl checkTable
        WHERE workTable.CustomerName = checkTable.CustomerName
            AND workTable.ProductName = checkTable.ProductName
            AND workTable.KeyCode = checkTable.KeyCode
    )
RowNumber     CustomerName     ProductName     KeyCode  ActivationDate
1             cmp1             game            28734    2011-02-24 08:40:45.790
2             cmp2             game            28736    2011-02-24 08:40:45.790
3             cmp2             game            28736    2011-02-24 03:52:45.793
4             cmp1             game            28734    2011-02-24 03:52:45.793
5             cmp1             game            28734    2011-02-23 20:40:45.790
6             cmp2             game            28736    2011-02-23 20:40:45.790
7             cmp2             game            28736    2011-02-23 13:28:45.790
8             cmp1             game            28734    2011-02-23 13:28:45.790
9             cmp1             game            28734    2011-02-08 08:40:45.790
10            cmp2             game            28736    2011-02-08 08:40:45.790

अगर आप एक से अधिक चाहते हैं...

SELECT  ROW_NUMBER() OVER(ORDER BY ActivationDate DESC) RowNumber,
        CustomerName, 
        ProductName, 
        KeyCode, 
        ActivationDate      
FROM @tbl workTable
WHERE NOT ActivationDate IN 
    (
        SELECT TOP 2 ActivationDate
        FROM @tbl checkTable
        WHERE workTable.CustomerName = checkTable.CustomerName
            AND workTable.ProductName = checkTable.ProductName
            AND workTable.KeyCode = checkTable.KeyCode
        ORDER BY ActivationDate DESC
    )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DevOps:DBA या डेवलपर - सही संतुलन प्राप्त करना

  2. रिकॉर्ड का पहला उदाहरण चुनें

  3. किसी विशिष्ट डेटाबेस के लिए अंतिम निष्पादित क्वेरी

  4. खेल से आगे रहने के लिए SQL सर्वर प्रदर्शन मेट्रिक्स

  5. ब्रेंट ओज़र और पिनल डेव से SQL सर्वर प्रदर्शन सलाह