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

MySQLは、作成日に基づいて重複値のランクを取得します

    select
    t.*,
    @rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,
    @prevDate := create_date
    from
    your_table t 
    , (select @rank := 0, @prevDate := null) var_init
    order by create_date, id
    

    説明:

    ここ

    , (select @rank := 0, @prevDate := null) var_init
    

    変数は初期化されます。書くのと同じです

    set @rank = 0;
    set @prevDate = null;
    select ... /*without the crossjoin*/;
    

    次に、select句の列の順序が重要です。まず、この行で確認します

    @rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,
    

    現在の行の日付が前の行と同じ場合。 @prevDateは、前の行の値を保持します。はいの場合、@rank 変数は、増分されない場合でも同じままです。

    次の行で

    @prevDate := create_date
    

    @prevDateを設定します 現在の行の値に可変。そのため、selectの列の順序 条項は重要です。

    最後に、前の行で確認しているため、日付が異なる場合は、order by 条項は重要です。




    1. varchar2(n BYTE | CHAR)デフォルト->CHARまたはBYTE

    2. 行番号と一致するかどうかに基づいて、HTMLテーブル番号の行にデータを入力するにはどうすればよいですか?

    3. JDBCTemplateは、BeanPropertyRowMapperを使用してネストされたPOJOを設定します

    4. MySQLデータベースにJSON文字列を保存する方法