Redian新闻
>
[SQL求助] 取每个group的第一个record
avatar
[SQL求助] 取每个group的第一个record# Database - 数据库
z*k
1
大家帮忙
我的table大概是这样的
Attr1, Attr2, Attr3
A 1 1.1213
A 2 3.3242
A 3 2.123
B 4 8.123
B 5 3.1232
Attr1和Attr2都排好序了(分别都是增序,可以把Attr2看作是Index),我现在想对每
个Attr1取
第一个record,这样的SQL代码该怎么写啊
avatar
i*a
2
use rank and partition
avatar
z*k
3
咦,我用postgresql怎么没有这个功能,我查document是有的啊。。。
我的版本8.3.7是不是太低了

【在 i****a 的大作中提到】
: use rank and partition
avatar
i*a
4
oh, don't know that system, can't help. wait for big cows to help you ba
avatar
j*n
5
try to take advantage of LIMIT, maybe
avatar
a9
6
select * from table where attr2 in (select max(attr2) from table group by
attr1)

【在 z**k 的大作中提到】
: 大家帮忙
: 我的table大概是这样的
: Attr1, Attr2, Attr3
: A 1 1.1213
: A 2 3.3242
: A 3 2.123
: B 4 8.123
: B 5 3.1232
: Attr1和Attr2都排好序了(分别都是增序,可以把Attr2看作是Index),我现在想对每
: 个Attr1取

avatar
j*n
7
wrong... but close.

【在 a9 的大作中提到】
: select * from table where attr2 in (select max(attr2) from table group by
: attr1)

avatar
p*e
8
select * from(
select *,
ROW_NUMBER() over(partition by attr1 order by attr2 asc) rn
from sample ) c
where rn<2;

【在 j*****n 的大作中提到】
: wrong... but close.
avatar
i*a
9
seems like LZ's system doesn't have rank/row_number and partition

【在 p**e 的大作中提到】
: select * from(
: select *,
: ROW_NUMBER() over(partition by attr1 order by attr2 asc) rn
: from sample ) c
: where rn<2;

avatar
j*n
10
finally got some time...
select A.*
from table AS A
join (select attr1, min(attr2) as theOne
from table
group by attr1) AS B
ON A.attr1 = b.attr1 AND A.Attr2 = B.theOne

【在 i****a 的大作中提到】
: seems like LZ's system doesn't have rank/row_number and partition
avatar
a9
11
你这个和我那个有什么区别啊?
不就是多了个attr1列?

【在 j*****n 的大作中提到】
: finally got some time...
: select A.*
: from table AS A
: join (select attr1, min(attr2) as theOne
: from table
: group by attr1) AS B
: ON A.attr1 = b.attr1 AND A.Attr2 = B.theOne

avatar
B*g
12
终于有时间读post了

【在 j*****n 的大作中提到】
: finally got some time...
: select A.*
: from table AS A
: join (select attr1, min(attr2) as theOne
: from table
: group by attr1) AS B
: ON A.attr1 = b.attr1 AND A.Attr2 = B.theOne

avatar
w*7
13
这位同学, 你那个query出来的max值对应的是哪个attr1呀? (如果没attr1的话)

【在 a9 的大作中提到】
: 你这个和我那个有什么区别啊?
: 不就是多了个attr1列?

avatar
j*n
14
give a try, you will see the diff is big...

【在 a9 的大作中提到】
: 你这个和我那个有什么区别啊?
: 不就是多了个attr1列?

avatar
B*g
15
其实要考虑:
1.attr2是不是unique?
2.attr1,attr2 combine是不是unique?
3.几个column的type
4.index在哪?

【在 j*****n 的大作中提到】
: give a try, you will see the diff is big...
avatar
j*n
16
en, 看来俺还是没仔细...

【在 B*****g 的大作中提到】
: 其实要考虑:
: 1.attr2是不是unique?
: 2.attr1,attr2 combine是不是unique?
: 3.几个column的type
: 4.index在哪?

avatar
m*k
17
既然楼主说attr2可以作为index, 那他的script没大错, 把max改成min就对了

【在 j*****n 的大作中提到】
: wrong... but close.
avatar
w*e
18
en, 北京MM考虑很全呀
赞!

【在 B*****g 的大作中提到】
: 其实要考虑:
: 1.attr2是不是unique?
: 2.attr1,attr2 combine是不是unique?
: 3.几个column的type
: 4.index在哪?

avatar
a9
19
9494

【在 m**k 的大作中提到】
: 既然楼主说attr2可以作为index, 那他的script没大错, 把max改成min就对了
avatar
B*g
20
其实楼主说的都没用:
1.index不一定unique
2.在数据库里排序了啥用都没有

【在 m**k 的大作中提到】
: 既然楼主说attr2可以作为index, 那他的script没大错, 把max改成min就对了
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。