Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

TSQL để nhận các bản ghi DISTINCT theo thứ tự và sau đó áp dụng số hàng

Tôi nghĩ đây là những gì bạn đang tìm kiếm:Bạn muốn tất cả các hàng có số hàng không phải là Ngày kích hoạt tối đa

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

Nếu bạn muốn nhiều hơn một ...

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. Làm cách nào để thêm thuộc tính nhận dạng vào cột hiện có trong SQL Server

  2. Đăng nhập thất bại. Thông tin đăng nhập từ một miền không đáng tin cậy và không thể được sử dụng với xác thực Windows

  3. Ngắt dòng SQL không hoạt động

  4. THAM GIA TRÁI so với LEFT OUTER THAM GIA trong SQL Server

  5. Tại sao so sánh biến ngày SQL với null lại hoạt động theo cách này?