0

MySQL での rownum のシミュレーションに関する次のブログ記事を興味深く読みました。

http://craftycodeblog.com/2010/09/13/rownum-simulation-with-mysql/

この概念を拡張して、特定の条件が満たされたときに行番号をリセットする、つまり、他の列の値を変更すると、結果は次のようになります。

  id | date       | rownum
-----+------------+--------
   1 | 2013-03-20 |      1
   2 | 2013-03-20 |      2
   3 | 2013-03-20 |      3
   4 | 2013-03-21 |      1   <-- rownum resets because date changes
   5 | 2013-03-21 |      2
   6 | 2013-03-21 |      3
   7 | 2013-03-22 |      1
   8 | 2013-03-22 |      2

私はこれを何時間も理解しようとしてきましたが、それを示すのに満足できるものは何もありません. どんな助けでも大歓迎です!

4

2 に答える 2

1

以下を使用して、ユーザー定義変数を実装して、日付の各グループの行番号を取得できます。

select id, date, rownum
from
(
  select id,
    date,
    @row:=case when @prev=date then @row else 0 end +1 rownum,
    @prev:=date  
  from yourtable
  cross join (select @row:=0, @prev:=null) c
  order by date
) d
order by date, rownum

デモで SQL Fiddle を参照してください

于 2013-03-29T19:23:20.920 に答える
0

これは機能します。http://www.sqlfiddle.com/#!2/e7f5e/11を参照してください。

SELECT if(changed, @rownum:=1, @rownum:=@rownum + 1) as rownum, rowdate
FROM (SELECT if(@lastdate=rowdate, '', @lastdate:=rowdate) as changed, rowdate
      FROM dates) flagged,
     (SELECT @rownum:= 0, @lastdate:='') setup;
于 2013-03-29T19:53:25.693 に答える