user_table
----------------------------
id | group_id | sequence| name |
----------------------------
1 | 1 | 1 | emi |
----------------------------
2 | 1 | 2 | shun |
----------------------------
3 | 2 | 1 | yumi |
----------------------------
4 | 1 | 5 | jo |
…
group_idごとにシーケンス番号(グループ内のユニーク番号)を振っています。
shun(group_id=1,sequence=2)のページでシーケンス番号の前後を取りたいのですがどうすればいいでしょうか?
すでに辞めたユーザもいるためシーケンス番号は必ず連続しているとは限らず、抜けている場合もあります。
例として、shun(group_id=1,sequence=2)の前後を取る場合はemiとjoのシーケンス番号を取得したいのです。
下記で出来ましたがサブクエリなしでもできそうなのとあまりきれいでないのでご教示お願いいたします。
select (select min(sequence) from t_files where album_id=1 and sequence>2) next,( select min(sequence) prev from t_files where album_id=1 and sequence<2) prev;
No.3ベストアンサー
- 回答日時:
条件が異なるから普通に、二回
SELECT * FROM user_table WHERE group_id = 1 AND sequence > 2 ORDER BY sequence LIMIT 1;
SELECT * FROM user_table WHERE group_id = 1 AND sequence < 2 ORDER BY sequence DESC LIMIT 1;
どーしても一回で済ませたいなら、
SELECT
MAX(CASE sequence < 2 THEN sequence ELSE NULL END) AS prev
MIN(CASE sequence > 2 THEN sequence ELSE NULL END) AS next
FROM user_table
WHERE group_id = 1;
又は
SELECT
*
FROM user_table
WHERE group_id = 1
AND sequence >= (
SELECT sequence FORM user_table WHERE group_id = 1 AND sequence < 2
ORDER BY sequence DESC LIMIT 1
)
AND sequence <> 2
LIMIT 2;
ありがとうございます。
ご教示いただいたものが少し間違っていたため下記のように修正し、実現しました。
SELECT
MAX(CASE when sequence < 2 THEN sequence ELSE NULL END) AS prev,
MIN(CASE when sequence > 2 THEN sequence ELSE NULL END) AS next
FROM user_table
WHERE group_id=1;
本当にありがとうございました!
No.2
- 回答日時:
例示より長くなってしまいちょっと微妙なんですが
ちゃんとやるならこんな感じになりそうな気がします。
ちなみにSQLは効率を考えて2つにわけてあります
select @rank:=(
select count(*) from user_table as u2
where u1.group_id=u2.group_id
and u1.id>u2.id
) as rank
from user_table as u1
where group_id=1
and sequence=2
;
select (
select count(*) from user_table as u2
where u1.group_id=u2.group_id
and u1.id>u2.id
) as rank
,`u1`.* from user_table as u1
where group_id=1
having rank between @rank -1 and @rank +1
ありがとうございます。
ご教示いただいたものより、私がすでに書いたものほうが効率的な気がします。。
select (select min(sequence) from user_table
where group_id=1 and sequence>2) next,( select min(sequence) prev from user_table where group_id=1 and sequence<2) prev;
No.1
- 回答日時:
例として提示されているのが「user_table」で、実際につくられたSQLのテーブルが「t_files 」、しかも「user_table」にはない「album_id」が出てきています。
「ページ」という言葉も出てますが、これがどういう意味なのかも分かりません。
ちょっと答えようがないです。
この回答への補足
お礼の文も間違えてました。。。
select (select min(sequence) from user_table
where group_id=1 and sequence>2) next,( select max(sequence) prev from user_table where group_id=1 and sequence<2) prev;
ご指摘いただきありがとうございます。
間違えておりました。
正しくは下記になります。
select (select min(sequence) from user_table
where group_id=1 and sequence>2) next,( select min(sequence) prev from user_table where group_id=1 and sequence<2) prev;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
同一のユーザー、同一商品のと...
-
マイクラPC版のコマンドで効率...
-
テーブル名を省略して「h.id」...
-
副問合せの書き方について
-
複数テーブルのGROUP BY の使い...
-
select文のwhere句に配列を入れ...
-
SQLで残高計算
-
クエリ表示と、ADOで抽出したレ...
-
php+MySQLでレコードが何行目か...
-
select文で特定のIDを抽出しupdate
-
MySQLでのバイナリデータ削除方法
-
sqlで、600行あるテーブルを100...
-
SQL Left Join で重複を排除す...
-
書籍の内容はまともでしょうか?
-
MySQLのint型で001と表示する方...
-
【MySQL】本当に困っているので...
-
SQLサーバから、項目の属性(型...
-
SELECT/別テーブルのレコード...
-
AUTO_INCREMENTのあるテーブル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
select文のwhere句に配列を入れ...
-
selectした大量データをinsert...
-
センノシド異性体構造式
-
Unionした最後にGROUP BYを追加...
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
URL と行番号の指定
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
おすすめ情報