MySQLのSQLにてグループ内で連番を付けたい


MySQL 5.6を利用しています。

分析関数を持たないRDBMSのSQLでは、どのようなSQLを書くのが一般的でしょうか？  
一般的ではなくとも、解決できるSQLがありましたら教えてください。  
よろしくお願いいたします。

やりたいこと：

下記のテーブルがあります。

[code]

    ユーザID 作成日時
    --------------------------
    10012   2015-01-04
    10010   2015-01-01
    10011   2014-01-15
    10010   2015-01-02
    10011   2015-12-09
    10010   2015-01-03
    10012   2015-11-01
    10011   2015-05-08
    10012   2015-01-03
    
[/code]

SQLで下記の結果を取得したいです。  
※「ユーザID」「作成日時」で昇順に並べかえて、  
グループ内（同じユーザID内）で通番を付与

[code]

    ユーザID 作成日時   グループ内通番
    -------------------------------
    10010   2015-01-01 1
    10010   2015-01-02 2
    10010   2015-01-03 3
    10011   2014-01-15 1
    10011   2015-05-08 2
    10011   2015-12-09 3
    10012   2015-01-03 1
    10012   2015-01-04 2
    10012   2015-11-01 3
    
[/code]




MySQL だとユーザー変数で連番をつけたりします。

[code]

    set @no:=0;
    set @user_id:=null;
    
    select
      if(@user_id <> user_id, @no:=1, @no:=@no+1) as no,
      @user_id:=user_id as user_id,
      created_at
    from t order by user_id, created_at
    
[/code]

MySQL 特有の機能を使わないのであれば、次のように相関サブクエリを使うとかでしょうか。

[code]

    select
      t1.user_id, t1.created_at, (
        select count(*) from t t2
          where t1.user_id = t2.user_id
            and t1.created_at >= t2.created_at
      ) as no
    from t t1
    order by
      t1.user_id, t1.created_at
    
[/code]

（同値があるときの結果がちょっと変わりますが）

そのテーブルの主キーが `id` だとして、次のようにただのサブクエリでもいいかもしれません。

[code]

    select
      t1.user_id,
      t1.created_at,
      sum(t1.created_at >= t2.created_at) as no
    from t t1 inner join t t2 on t1.user_id = t2.user_id
    group by t1.id, t1.user_id, t1.created_at
    order by t1.user_id, no
    
[/code]

