简体   繁体   English

一列分组记录

[英]Group record by one column

I am using SQL Server 2012. I have table like this: 我正在使用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

I would like to get something like this: 我想得到这样的东西:

 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

I tried this SQL query: 我试过这个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

But I have only one record for Val3 . 但我只有Val3一个记录。

Something like this should do it (this is in mysql but the same principles apply in any sql database): 应该这样做(这在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

Maybe this help you: 也许这可以帮助您:

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

this should work 这应该工作

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM