2016-07-05 17 views
-1

私は3つの列を持つ次の表を持っています。私は "apprul_num_sequence"列で最低から最高まで注文する必要があり、 "apprul_cd_fare_rule_bigint"マイナーにとどまっていなければなりません。 2番目の表に示すように、期待される結果になります。私は、これはグループ別のクエリであり、順序は同じですが、私は推測できません。何か案は?sqlは小グループを選択します

+--------------------------+-------------------+------------------+ 
|apprul_cd_fare_rule_bigint|apprul_num_sequence|apprul_crr_segment| 
+--------------------------+-------------------+------------------+ 
|      INNJ|   4999800|     1| 
|      INNJ|   4999800|     2| 
|      INNJ|   4999800|     3| 
|      INNJ|   4999800|     4| 
|      INNJ|   4999800|     5| 
|      INNJ|   4999800|     6| 
|      INNR|   5000000|     1| 
|      INNR|   5000000|     2| 
|      LW15|   5004900|     1| 
|      INNJ|   5005000|     1| 
|      INNJ|   5005000|     2| 
|      INNJ|   5005000|     3| 
|      INNJ|   5005000|     4| 
|      INNJ|   5005000|     5| 
|      INNJ|   5005000|     6| 
+--------------------------+-------------------+------------------+ 

期待される結果:

+--------------------------+-------------------+------------------+ 
|apprul_cd_fare_rule_bigint|apprul_num_sequence|apprul_crr_segment| 
+--------------------------+-------------------+------------------+ 
|      INNJ|   4999800|     1| 
|      INNJ|   4999800|     2| 
|      INNJ|   4999800|     3| 
|      INNJ|   4999800|     4| 
|      INNJ|   4999800|     5| 
|      INNJ|   4999800|     6| 
|      INNR|   5000000|     1| 
|      INNR|   5000000|     2| 
|      LW15|   5004900|     1| 
+--------------------------+-------------------+------------------+ 

つ以上のケースINNJで同じようであれば、私は最低の「apprul_num_sequence」と「apprul_cd_fare_rule_bigint」でなければならない、です。

+1

mysqlまたはsqlサーバを使用していますか?彼らは同じことではありません。 –

+0

"stay with the ... minor"?ハァッ? –

+0

これはjava、sqlのプログラム用です – nest

答えて

0

あなたは、SQL Serverでは、サブクエリ

select * from my_table 
where (apprul_cd_fare_rule_bigint, apprul_num_sequence) 
in (select apprul_cd_fare_rule_bigint, min(apprul_num_sequence) 
     from my_table group by apprul_cd_fare_rule_bigint) 
order by apprul_num_sequence 
+0

mysql?私は以前にそのようなことを見たことはありません...もちろん、私は辛うじてmysqlを綴ることができます。有効な構文ではないSQL Server。もちろん、OPは彼らがどのDBMSを使用しているかを明確にしていません。有効であればかなり面白いです。私はそれについてmysqlで読む必要があります。 –

+0

これはmysql ..とmysqlのためのものです。mysqlの有効なsintaxですが、joinを使っても取得できます。もっと理解しやすいので、私はこの方法が好きです。 – scaisEdge

+0

あなたは少し欠けていると思います、またはそれは意図的だった。この方法を使用するときは、索引を損なわないように注意してください。 – Strawberry

0

と句で使用することができ、あなたは、この使用して、窓関数だろう:データベースのいずれかで

select t.* 
from (select t.*, 
      dense_rank() over (partition by apprul_cd_fare_rule_bigint 
           order by apprul_num_sequence 
           ) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

を、あなたはで相関サブクエリを使用することができますwhere句:

select t.* 
from t 
where t.apprul_num_sequence = (select min(t2.apprul_num_sequence) 
           from t t2 
           where t2.apprul_cd_fare_rule_bigint = t.apprul_cd_fare_rule_bigint 
          ); 
関連する問題