最新のユーザーネームを連続して数える方法

このQ&Aのポイント
  • バージョン4.1.16を使っている状況で、idの大きい方から順番にuser_nameが連続している回数を知りたいです。
  • 例えば、idが8から4までのレコードについて、user_nameが連続している回数を知りたいです。
  • このような情報を取得するためには、SQL文を使用して記述する必要があります。
回答を見る
  • ベストアンサー

いくつ続いているか知りたい

バージョン4.1.16を使っています。 id BIGINT PRIMARY KEY UNSIGNED AUTO_INCREMENT, user_name VARCHAR(64), というテーブルがあったとして、idの大きい(最近の)方から 順番にuser_nameがいくつ続いているか知りたいのです。 例えば、 id    user_name 8      佐藤 7      佐藤 6      佐藤 5      佐藤 4      佐藤 3      鈴木 2      佐藤 1      佐藤 だった場合、佐藤はid「8」から数えてid「4」までの5連続ですよね。 こういうのを知るためにはSQL文ではどのように書けば良いのでしょうか?

  • MySQL
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ぱっとおもいつき、もっと効率的な方法はあると思いますが・・・ SET @PRE='',@RENZOKU=1; CREATE TEMPORARY TABLE RENZOKU_TEST SELECT if(@PRE=user_name,@RENZOKU:=@RENZOKU+1,@RENZOKU:=1) as RENZOKU,@PRE:=user_name as user_name FROM test ORDER BY id; SELECT MAX(RENZOKU) AS RENZOKU FROM RENZOKU_TEST

takagoo100
質問者

お礼

ご返答ありがとうございます。 さっそく試してみて、できました。ありがとうございます。

その他の回答 (1)

  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

補足をお願いします。 確かに「id 4~8」まで佐藤が続いていますが「id 1~2」も佐藤が続いています。 「id 1~2」は無視してもいいのですか? 5連続していた場合、欲しい結果は【5】ですか? それとも【8,4】ですか?

takagoo100
質問者

補足

ご返答ありがとうございます。 補足します。 「id 1~2」は無視していいです。 欲しい結果は【5】です。 先頭からいくつ続いているかが知りたいです。

関連するQ&A

  • ユーザ情報を格納するテーブルについて

    MySQLバージョン4.1.16を使用しています。 基本となるユーザ情報を格納するテーブルで、 自動インクリメントされるidというカラムを使用する場合と、 使用しない場合とでは、どちらが良いというのはあるのでしょうか? みなさんはどちらの形で利用しているのでしょうか? [userinfoテーブル] id使用 id UNSIGNED AUTO_INCREMENT PRIMARY KEY user_id VARCHAR(12) UNIQUE password TINYTEXT [userinfoテーブル] id使用しない user_id VARCHAR(12) PRIMARY KEY password TINYTEXT

    • ベストアンサー
    • MySQL
  • 外部キーを持つテーブルを作成しようとするとエラーがでます

    XAMPPバージョン1.5.4 MySQLバージョン4.1.16 という環境で、my.cnfでInnoDBを使えるように設定しています。 そして CREATE TABLE admin_roles (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(12) NOT NULL) ENGINE = InnoDB; という非参照列idを持つadmin_rolesテーブルを作り(成功し)、さらに role_idを外部キーとしてadmin_user_roleテーブルを作成しようとすると、 Error Number: 1005 Can't create table '.\test\admin_user_role.frm' (errno: 150) CREATE TABLE admin_user_role (userid VARCHAR(12) NOT NULL, role_id BIGINT DEFAULT 0, FOREIGN KEY (role_id) REFERENCES admin_roles(id) ON DELETE CASCADE) ENGINE = InnoDB; というエラーが出てしまいます・・・ admin_user_roleの記述のどこが間違っているのでしょうか?

    • ベストアンサー
    • MySQL
  • カラム名の付け方について

    このジャンルでお願いします。 例えば次のようなアカウント情報を格納するテーブルがあったとして CREATE TABLE user (  id int(11) NOT NULL AUTO_INCREMENT,  name varchar(64),  email varchar(64),  password varchar(64),  PRIMARY KEY(id) ); idカラム名を「id」か「user_id」にするか悩んでいます。 自分としては「id」のままで良いと思っているのですが、 参考書や他の方のやり方を見てると「user_id」のようにしてる方もいます。 「user_id」にすることによってSQL文を見た時にも何のidかすぐ分かるし、 USING句を使えるなどのメリットがあるのでたしかにこちらの方が良いかなぁとは思うのですが、 「user_id」にするなら統一性をもたせるために「name」も「user_name」にするのか、 「email」も「user_email」にするのか、などキリがないというか・・・ そういう理由もあって自分としては「id」のままなのですが、 みなさんはどちらのやり方をされているのでしょうか?

  • テーブル作成時に1289エラーが出る。

    テーブル作成時に、ERROR 1289 (HY000): The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working というエラーが出てしまいます。 どういった原因が考えられるでしょうか? Mysql5.0.15を使っています。 CREATE文 CREATE TABLE USER ( ID BIGINT NOT NULL AUTO_INCREMENT ,NAME VARCHAR(30) ,PRIMARY KEY (ID) ) type=InnoDB;

  • 挿入ができない

    MySQLバージョン4.1.16を使用しています。 「user_role」テーブルを 「users」テーブルのuser_idカラムと「roles」テーブルのrole_seqカラムを外部キーとして作成します。 そして「user_role」テーブルにuser_id「aaaa」とrole_seq「1」をINSERTしようとしたのですが、 以下のようなエラーが出てしまいます。 Cannot add or update a child row: a foreign key constraint fails (`test/user_role`, CONSTRAINT `user_role_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE) INSERT INTO user_role (user_id, role_seq) VALUES ('aaaa', 1) どこらへんが間違っているのでしょうか? 以下の手順でテーブルを作成しました。 CREATE TABLE users (user_id VARCHAR(16) NOT NULL, password VARCHAR(32) NOT NULL, regist_date DATETIME NOT NULL, PRIMARY KEY (user_id)) ENGINE = InnoDB CREATE TABLE roles (role_seq BIGINT UNSIGNED AUTO_INCREMENT, name VARCHAR(32) NOT NULL, PRIMARY KEY (role_seq)) ENGINE = InnoDB CREATE TABLE user_role (role_seq BIGINT UNSIGNED, user_id VARCHAR(16) NOT NULL, FOREIGN KEY (role_seq) REFERENCES roles(role_seq) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE) ENGINE = InnoDB

    • ベストアンサー
    • MySQL
  • auto_incrementを任意の数字から開始するには

    次のようなテーブルで入力するとidが1~始まりますが、 これを1000~開始する方法が分かりません、ご教授お願いします。 CREATE TABLE addressbook ( id smallint(4) UNSIGNED NOT NULL auto_increment, name1 varchar(20) default NULL, birthday date default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=sjis;

    • ベストアンサー
    • MySQL
  • MySQLのテーブル設計で迷っています(桁数)

    MySQLのテーブル設計で迷っています。 クリエイト文のカッコの中は桁数を表しているのでしょうか?それともバイト数でしょうか?桁数であれば、それぞれの型で何桁まで設定できますでしょうか? int型のnoを18桁に変更したいのですが、調べているうちに迷ってしまいました。 型 バイト 最小値 最大値 TINYINT 1 -128 127 SMALLINT 2 -32768 32767 MEDIUMINT 3 -8388608 8388607 INT 4 -2147483648 2147483647 BIGINT 8 -9223372036854775808 9223372036854775807 CREATE TABLE `user` ( `no` int(8) unsigned NOT NULL auto_increment, `id` varchar(24) NOT NULL default '', `email` varchar(255) NOT NULL default '', `reg_date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`no`) ) TYPE=MyISAM;

    • ベストアンサー
    • MySQL
  • SQLite(3.2.2)でauto_increment

    今、SQLiteを利用してつまづいています。 バージョンは3.2.2です。(Linux) MySQL、PostgreSQLの知識はあります。 プライマリーキー(id)にシリアルを作成しようと思い、http://cl.pocari.org/2006-02-12-1.html を参考にしながらテーブルを作りました。 CREATE TABLE bbs ( id INTEGER UNSIGNED NOT NULL PRIMARY KEY, name VARCHAR(255) NOT NULL, message TEXT NOT NULL, last_update TIMESTAMP NOT NULL ); このbbsテーブルに対し、 INSERT INTO bbs (name,message,last_update) VALUES ('name','message','2008-04-03 12:11:00'); というクエリを発行すると 「SQL error: bbs.id may not be NULL」 とういエラーが返ってきます。 確かに、bbsテーブルのidカラムは「NOT NULL」制約があるのでエラーが正しいとは思うのですが、参考URLのauto_incrementの作成方法には、auto_incrementにしたいカラムをPRIMARY KEYでやればできる、のような事が書いてあったので、よく分かりません。 バージョンの問題なのか、クエリに誤りがあるのか分かる方おられましたら解答お願いします。 また、auto_incrementなカラムの作成方法も一緒に教えていただけたら幸いです。 宜しくお願いします。

  • Update文の書き方について

    下記のデータベースで『nameフィールドに値がセットされているもののみ』、別の文字に置き換えたいと思いますが、例えば『UPDATE `test` SET `name` = "かきくけ";』のような書き方ではnameフィールドのすべてのレコードを更新してしまいます。 その為、上記SQL文のSET以降で『nameフィールドに値がセットされているもののみ』という条件を付加すれば良いと思ったのですが、どのようなSQL文を書けば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 CREATE TABLE IF NOT EXISTS `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; INSERT INTO `test` (`id`, `name`) VALUES (1, 'あいうえお'), (2, ''), (3, 'さしす'), (4, ''), (5, 'ab'); 以上、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLでのINDEXの貼り方

    MySQLでのINDEXの貼り方にてご教示いただきたく思います。。 現在、ブログサイトを作っていて、記事ID毎にSNSでシェアされた数を保存する仕組みを作っています。 ストレージエンジン = InnoDB を設定しています。 post_idに同じIDが無い場合はINSERTし、ある場合はUPDATEとなります。 検索をかけるSELECT文の想定は以下の2つだと思っています。 SELECT * FROM tablename WHERE post_id = 1234; SELECT facebook FROM tablename WHERE post_id = 5678 作成したテーブル構造は以下になっています。 名前 | データ型 | 属性 | NULL | デフォルト値 | その他 ID | bigint(20) | UNSIGNED | いいえ | なし | AUTO_INCREMENT post_id | bigint(20) | UNSIGNED | いいえ | 0 facebook | bigint(20) | UNSIGNED | いいえ | 0 twitter | bigint(20) | UNSIGNED | いいえ | 0 googleplus | bigint(20) | UNSIGNED | いいえ | 0 pocket | bigint(20) | UNSIGNED | いいえ | 0 pinterest | bigint(20) | UNSIGNED | いいえ | 0 hatena | bigint(20) | UNSIGNED | いいえ | 0 line | bigint(20) | UNSIGNED | いいえ | 0 total | bigint(20) | UNSIGNED | いいえ | 0 datetime | datetime | | いいえ | 0000-00-00 00:00:00 リレーションは行う予定は無いのですが行うかもしれません。 分からないながらもINDEXを設定 ( 添付画像参照 ) してみました。 ご指導ご教示の程よろしくお願いいたします。

    • ベストアンサー
    • MySQL