2016-07-05 60 views
-1

我有3列的下表。我需要通過「apprul_num_sequence」列從最低到最高排序,並保留「apprul_cd_fare_rule_bigint」未成年人。如第二張表所示,這將是預期的結果。我覺得這是一個查詢,並按順序排列,但我無法猜測。有任何想法嗎?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| 
+--------------------------+-------------------+------------------+ 

也就是說,我必須與「apprul_cd_fare_rule_bigint」最低的「apprul_num_sequence」如果不止一個是一樣的話INNJ。

+1

你使用的是mysql還是sql server?它們不是同一件事。 –

+0

「留下......未成年人」?咦? –

+0

這是一個在java程序,sql – nest

回答

0

您可以在第一個子查詢

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服務器中。當然OP還沒有明確說明他們正在使用哪個DBMS。如果這是有效的,這是非常有趣的。我將不得不在MySQL中閱讀。 –

+0

這是爲MySQL ..和是..是一個有效的sintax在MySQL ..但你也可以獲得一個連接..我更喜歡這種方式,因爲更容易理解.. – scaisEdge

+0

我覺得你有點失蹤,還是那種故意的。請注意,使用此方法時,請注意不要破壞索引。 – Strawberry

0

在SQL Server中使用,你會做到這一點使用的窗函數:

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 
          );