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

値が異なる場合にのみ選択

    前のnameに一致する行を除外する場合 、次のようないくつかの方法があります。

    ケース1:MySQL8を使用する場合は、 LAG 機能。

    SELECT t1.id,t1.name,t1.price FROM (
      SELECT t2.id,t2.name,t2.price,
        LAG(t2.name) OVER(ORDER BY t2.id) prev
      FROM mytable t2
    ) t1
    WHERE t1.prev IS NULL OR t1.name<>t1.prev
    ORDER BY 1
    

    ケース2:idの場合 sはステップなしで連続しているため、nameを比較することで期待される結果が得られます。 および前のid JOINによる。

    SELECT t1.id,t1.name,t1.price FROM mytable t1
      LEFT JOIN mytable t2
      ON t1.name=t2.name AND
         t1.id=t2.id-1
    WHERE t1.id=1 OR t2.id IS NOT NULL
    ORDER BY 1
    

    ケース3:idの場合 sは連続的ではなく、最大のidを取得する方法があります 他のidを超えない 。

    SELECT t1.id,t1.name,t1.price FROM mytable t1
      LEFT JOIN mytable t2
      ON t1.name=t2.name AND
         t1.id=(SELECT MAX(t3.id) FROM mytable t3 WHERE t3.id<t2.id)
    WHERE t1.id=1 OR t2.id IS NOT NULL
    ORDER BY 1
    

    DBフィドル



    1. 間違ったバイトカウント長によって破損したシリアル化された文字列を修復するにはどうすればよいですか?

    2. PHPを使用してmysqlダンプをインポートします

    3. サブクエリを使用せずにMySQLで複数のクエリを実行する

    4. ネストされたmysqlクエリのパフォーマンスの低下