我有下表有3列。我需要通过“apprul_num_sequence”列从最低到最高排序,并留在“apprul_cd_fare_rule_bigint”小调。如第二个表所示,这将是预期的结果。我觉得这是一个分组依据和排序的查询,但我无法猜测。有什么想法吗?
+--------------------------+-------------------+------------------+
|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那样。
答案 0 :(得分: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
答案 1 :(得分: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
);