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

優先度に基づいてクエリを選択する

    ランク 同順位 (同じ B 値を持つもの) に同じランク値を持たせるため、ROW_NUMBER ではなく:

    WITH summary AS (
      SELECT t.*,
             RANK() OVER (PARTITION BY t.id 
                              ORDER BY t.value_type DESC) AS rank
        FROM TABLE t
       WHERE t.value_type IN ('A', 'B'))
    SELECT s.id,
           s.value,
           s.value_type,
           s.data
      FROM summary s
     WHERE s.rank = 1
    

    非 CTE バージョン:

    SELECT s.id,
           s.value,
           s.value_type,
           s.data
      FROM (SELECT t.*,
                   RANK() OVER (PARTITION BY t.id 
                                    ORDER BY t.value_type DESC) AS rank
              FROM TABLE t
             WHERE t.value_type IN ('A', 'B')) s
     WHERE s.rank = 1
    
    WITH test AS (
       SELECT 1 AS id, 'B' AS value_type
       UNION ALL
       SELECT 1, 'B'
       UNION ALL
       SELECT 1, 'A'
       UNION ALL
       SELECT 2, 'A'
       UNION ALL
       SELECT 2, 'A'),
         summary AS (
       SELECT t.*,
              RANK() OVER (PARTITION BY t.id 
                               ORDER BY t.value_type DESC) AS rank
         FROM test t)
    SELECT *
      FROM summary
     WHERE rank = 1
    

    私は得る:

    id   value_type  rank
    ----------------------
    1    B           1
    1    B           1
    2    A           1
    2    A           1
    


    1. サブクエリが2つの値を返すことは可能ですか?

    2. mysqldbの自動インクリメントにプレフィックスを追加

    3. IN句とパラメータを含むMySQLの誤った出力

    4. バインド値INSERTINTOmysql perl