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

SQL-あるフィールドで個別のレコードを選択し、別のフィールドからのレコードが最も多い

    SQL Server 2005以降、CTEの使用:

    WITH rows AS (
      SELECT t.id,
             t.staff_id,
             t.skill_id,
             t.mainskill,
             ROW_NUMBER() OVER (PARTITION BY t.staff_id ORDER BY t.mainskill DESC) AS rank
        FROM TABLE t)
      SELECT r.id,
             r.staff_id,
             r.skill_id,
             r.mainskill
        FROM rows r
       WHERE r.rank = 1
    ORDER BY r.staff_id
    

    SQL Server 2005以降、CTE以外と同等:

      SELECT r.id,
             r.staff_id,
             r.skill_id,
             r.mainskill
        FROM (SELECT t.id,
                     t.staff_id,
                     t.skill_id,
                     t.mainskill,
                     ROW_NUMBER() OVER (PARTITION BY t.staff_id ORDER BY t.mainskill DESC) AS rank
                FROM TABLE t) r
       WHERE r.rank = 1
    ORDER BY r.staff_id
    

    どちらもROW_NUMBER を使用します 、SQLServer2005以降でのみ使用可能です。



    1. MariaDBでのDATE()のしくみ

    2. 異なるMySQL列の日付と時刻を組み合わせて完全なDateTimeと比較するにはどうすればよいですか?

    3. 2つのテーブルを持つMysqlクエリphp

    4. グループ化して、多くの行を1つのテキスト文字列に連結します