1

次のSQLステートメントがあります。

SELECT ID, NAME FROM myTable
WHERE 
ID LIKE 'R43%' OR 
ID LIKE 'D32%' OR 
ID LIKE 'F22%'

IDには、次のような値が含まれる場合があります。

ID
____

R431
R431
R432
R434
D322
D322
D327
F226
F227

最初のIDのレコードのみを一致させるにはどうすればよいですか?上記の値と同様に、(R431、R431、D322、D322、F226)のレコードのみを取得します。私が取得しているテーブルのID値はシーケンシャルです(したがって、R432は常にテーブルのR431の後に表示されます)。

4

4 に答える 4

3

この種の問合せにはOracle Analytical関数を使用します

    select * from (
select id , substr(id,0,3),rank() over ( partition by substr(id,0,3) order by id) rank 
from mytable
WHERE ID LIKE 'R43%' OR ID LIKE 'D32%' OR ID LIKE 'F22%')
where rank = 1
于 2012-06-25T19:55:06.700 に答える
0

サブクエリを使用してみてください。

SELECT R.ID AS ID, R.NAME AS NAME FROM myTable R
WHERE 
R.ID LIKE 'R43%'
AND R.ID IN 
(
  SELECT DISTINCT A.ID
 FROM myTable A
 WHERE A.ID LIKE 'R43%'
 ORDER BY A.ID
 LIMIT 1
)

UNION 

SELECT D.ID AS ID, D.NAME AS NAME FROM myTable D
WHERE  
D.ID LIKE 'D32%'
AND D.ID IN 
(
  SELECT DISTINCT B.ID
 FROM myTable B
 WHERE B.ID LIKE 'D32%'
 ORDER BY B.ID
 LIMIT 1
)

UNION

SELECT F.ID AS ID, F.NAME AS NAME FROM myTable F
WHERE  
F.ID LIKE 'F22%'
AND F.ID IN 
(
  SELECT DISTINCT C.ID
 FROM myTable C
 WHERE C.ID LIKE 'F22%'
 ORDER BY C.ID
 LIMIT 1
)
于 2012-06-25T19:53:39.133 に答える
0

MIN クエリとネストされたサブクエリを組み合わせると、必要なものが得られます。

Select ID, 
       Name 
FROM myTable 
WHERE 
     ID IN ( 
       SELECT MIN(ID) From myTable WHERE ID LIKE 'R43%' OR  ID LIKE 'D32%' OR  ID LIKE 'F22%'     
           )

OrderDate など、キーオフしたい別のフィールドがある場合は、サブクエリを変更します。どちらの方法でも、外側のクエリは、内側のクエリで選択された ID からのみレコードを選択します。

于 2012-06-25T19:39:31.937 に答える
0

DISTINCT を使用:

SELECT DISTINCT ID, NAME FROM myTable
WHERE 
ID LIKE 'R43%' OR 
ID LIKE 'D32%' OR 
ID LIKE 'F22%'
于 2012-06-25T19:40:43.900 に答える