[英]Group record by one column
我正在使用SQL Server2012。我有這樣的表:
Val1 Val2 Val3 Val4
-------------------------------------------
1 25000.00 1 1900-01-01 00:00:00.000
2 25000.00 1 2012-04-02 00:00:00.000
1 25125.00 1 2013-01-01 00:00:00.000
1 25502.00 1 2014-01-01 00:00:00.000
2 25502.00 1 2014-04-01 00:00:00.000
3 25502.00 1 2015-01-01 00:00:00.000
4 25502.00 1 2015-04-01 00:00:00.000
1 62500.00 2 1900-01-01 00:00:00.000
2 62500.00 2 2012-06-29 00:00:00.000
1 63750.00 2 2013-01-01 00:00:00.000
1 65025.00 2 2014-01-01 00:00:00.000
1 69250.00 2 2015-01-01 00:00:00.000
1 4300.00 3 1900-01-01 00:00:00.000
2 4300.00 3 2012-05-01 00:00:00.000
1 4343.00 3 2013-01-01 00:00:00.000
2 4343.00 3 2013-06-01 00:00:00.000
3 4343.00 3 2013-09-01 00:00:00.000
4 4343.00 3 2014-04-01 00:00:00.000
5 4343.00 3 2014-09-01 00:00:00.000
1 3257.25 3 2014-09-15 00:00:00.000
2 3257.25 3 2015-03-01 00:00:00.000
1 4543.00 3 2015-04-01 00:00:00.000
我想得到這樣的東西:
Val1 Val2 Val3 Val4
----------------------------------------------
2 25000.00 1 2012-04-02 00:00:00.000
1 25125.00 1 2013-01-01 00:00:00.000
4 25502.00 1 2015-04-01 00:00:00.000
2 62500.00 2 2012-06-29 00:00:00.000
1 63750.00 2 2013-01-01 00:00:00.000
1 65025.00 2 2014-01-01 00:00:00.000
1 69250.00 2 2015-01-01 00:00:00.000
2 4300.00 3 2012-05-01 00:00:00.000
5 4343.00 3 2014-09-01 00:00:00.000
2 3257.25 3 2015-03-01 00:00:00.000
1 4543.00 3 2015-04-01 00:00:00.000
我試過這個SQL查詢:
select
t1.*
from
table1 t1
inner join
(select
Val3, max(Val1) as MaxRank
from
table1
group by
Val3) t13 on t1.Val3 = t13.Val3 and t1.Val1 = t13.MaxRank
order by
t1.Val3
但我只有Val3
一個記錄。
應該這樣做(這在mysql中,但是相同的原理適用於任何sql數據庫):
use example;
drop table if exists table1;
create table table1(
Val1 varchar(100),
Val2 varchar(100),
Val3 varchar(100)
);
insert into table1 values('1', '100.00', '1');
insert into table1 values('2', '100.00', '2');
insert into table1 values('2', '200.00', '2');
insert into table1 values('3', '100.00', '2');
insert into table1 values('3', '200.00', '2');
insert into table1 values('3', '300.00', '2');
insert into table1 values('4', '100.00', '4');
insert into table1 values('4', '200.00', '4');
insert into table1 values('4', '300.00', '4');
insert into table1 values('4', '300.00', '4');
select
val1,
max(val2)
from
table1
group by val1
order by val1
;
+ --------- + -------------- +
| val1 | max(val2) |
+ --------- + -------------- +
| 1 | 100.00 |
| 2 | 200.00 |
| 3 | 300.00 |
| 4 | 300.00 |
+ --------- + -------------- +
4 rows
也許這可以幫助您:
select t1.*
from table1 t1
join (
select max(Val1) as Val1, Val2, Val3
from table1
group by Val2, Val3
) t2 on t1.Val1=t2.Val1 and t1.Val2 = t2.Val2 and t1.Val3=t2.Val3
這應該工作
SELECT
val1,
val2,
val3,
val4
FROM
(SELECT *,
ROW_NUMBER () OVER (PARTITION BY val2 ORDER BY val1 DESC) rn
FROM table1
) a
WHERE
rn = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.