1

以下のようなデータを含むテーブルから、提供された ID の前後にある 5 番目のレコードを選択しようとしています。

私の頭に浮かんだのは次のとおりです。select id-5, id+10 from devTable where id = 10 and stateCode = 'CA';

ただし、これは実際には、stateCode を考慮して提供された ID の前後の 5 番目の ID を提供するものではなく、提供された ID に /sub 5 を追加するだけのようです。これを正しい方法で行う方法を知っていますか?

望ましい結果

supplied id = 10 and stateCode = CA
prev | next
2    | 16

supplied id = 9 and stateCode = NY
prev | next
NULL | NULL

データ

"id"  | "stateCode"
-------------------
"1"     "CA"
"2"     "CA"
"3"     "CA"
"4"     "CA"
"5"     "NY"
"6"     "NY"
"7"     "CA"
"8"     "CA"
"9"     "NY"
"10"    "CA"
"11"    "CA"
"12"    "NY"
"13"    "CA"
"14"    "CA"
"15"    "CA"
"16"    "CA"
4

2 に答える 2

8

1 つが 6 で2 つ目が5 のUNION ALL2 つのクエリでこれを試してください。LIMIT<=

id=10前後の5レコードを取得するには

(SELECT *  FROM devTable WHERE id <= 10 AND stateCode = 'CA' ORDER BY id DESC LIMIT 6)
UNION ALL
(SELECT *  FROM devTable WHERE id > 10 AND stateCode = 'CA' ORDER BY id ASC  LIMIT 5)
ORDER BY id

10 の前に 5 レコードのフィドルを参照してください

id=10前後の5レコード目を取得する

(SELECT *  FROM devTable WHERE id < 10 AND stateCode = 'CA' ORDER BY id DESC LIMIT 4,1)
UNION ALL
(SELECT *  FROM devTable WHERE id > 10 AND stateCode = 'CA' ORDER BY id ASC  LIMIT 4,1)
ORDER BY id

10 の前後の 5 番目のレコードのフィドルを参照してください

レコードを行単位で表示

SELECT 
(SELECT id  FROM devTable WHERE id < 10 AND stateCode = 'CA' ORDER BY id DESC LIMIT 4,1) AS `prev`,
(SELECT id  FROM devTable WHERE id > 10 AND stateCode = 'CA' ORDER BY id ASC  LIMIT 4,1) AS `next`

10行前後の5番目のレコードを表示

このソリューションは、5 番目のレコードだけに固有のものではなく、n 番目のレコードにも使用できます。

(SELECT 
  * 
FROM
  devTable 
WHERE id < 10 
  AND stateCode = 'CA' 
ORDER BY id DESC 
LIMIT (n - 1), 1) 

UNION ALL 

(SELECT 
  * 
FROM
  devTable 
WHERE id > 10 
  AND stateCode = 'CA' 
ORDER BY id ASC 
LIMIT (n - 1), 1) 
ORDER BY id 
于 2013-09-25T05:43:16.163 に答える
0

Oracle の場合、指定された ID の前に 5 番目のレコードを照会します

select * from (select id, statecode,rownum as rw 
from devTable where statecode = 'CA' and id < 10  
order by id desc) a
where a.rw = 5 ; 

指定された ID の後の 5 番目のレコードのクエリ

select * from (select id, statecode,rownum as rw 
from devTable where statecode = 'CA' and id > 10  
order by id asc) a
where a.rw = 5 ; 
于 2013-09-25T06:10:29.413 に答える