sql >> データベース >  >> RDS >> Sqlserver

TSQLを使用して、DISTINCTレコードを並べ替えてから、行番号を適用します

    これがあなたが探しているものだと思います:最大ActivationDateではない行番号を持つすべての行が必要です

    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. AWSGlueでMySQLテーブルを上書きする

    2. sqliteデータベースで日付を並べ替えますか?

    3. MySQLでEntityFrameworkウィザードがクラッシュする

    4. OracleDatabaseでデータベースオブジェクトとしてVARRAYを作成する方法