由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 求最小值对应的全记录SQL经典查询问题
相关主题
partition 表delete
SQL,UNION问题请教SQL server的一个programming的问题,谢谢
问一下SAS SQL在大数据方面的处理Import 50GB data from multiple .txt file into MS SQL database
Access VS SQL Server 我应该怎么选择?[SQL求助] 取每个group的第一个record
借人气问一下:ACCESS转成SQL (转载)一个SQL的问题(Groupby和Having的问题)
How to write this SQL? Urgent!!!面试的工作要求在关系数据库上有处理大规模数据的经验,这都包括哪些SQL技能呀?
请问T-SQL中Group By之后怎么找到特定的record请求SQL语句
问个基础的理论问题----数据库的基本差异有没有人对这些SQL SERVER 培训感兴趣啊
相关话题的讨论汇总
话题: reading话题: pid话题: depth话题: sql话题: partition
进入Database版参与讨论
1 (共1页)
d****f
发帖数: 313
1
现在有个表
PID,Depth,Reading,Percent
A-1,1.0,4,75
A-1,1.0,3,62
A-1,1.0,2,50
A-1,1.0,1,40
A-1,2.1,5,76
A-1,2.1,3,63
A-1,2.1,2,50
A-1,2.1,1,40
A-2,1.5,6,99
A-2,1.5,5,87
A-2,1.5,4,78
A-2,2.5,5,73
A-2,2.5,4,62
A-2,2.5,2,62
A-2,2.5,1,50
怎么求每个点PID,每个深度Depth,每个读数Reading大于2的那条最小的记录?要求同
时给出那个对应的百分比Percent
比如对第一组记录,就返回:
A-1,1.0,3,62
我感觉是很基本的一个查询,因为很久不接触数据库了,谢谢各位!
i****a
发帖数: 36252
2
select *
from
(
select *
, rank() over (partition PID order by Reading) as readingRank
from yourTable
where Reading > 2
group by PID
) ranking
where ranking.readingRank = 1

【在 d****f 的大作中提到】
: 现在有个表
: PID,Depth,Reading,Percent
: A-1,1.0,4,75
: A-1,1.0,3,62
: A-1,1.0,2,50
: A-1,1.0,1,40
: A-1,2.1,5,76
: A-1,2.1,3,63
: A-1,2.1,2,50
: A-1,2.1,1,40

d****f
发帖数: 313
3
楼上的办法怎么感觉有点不通用阿,我目前自己有个办法,就是先按照PID,DEPTH分组
,求出MIN(Reading)
SELECT PID, DEPTH, MIN(READING) AS MINR
FROM TABLE
WHERE READING>2
GROUP BY PID, DEPTH
然后再基于上面的结论把原表JOIN过来
SELEC A.PID, A.DEPTH, A.MINR, TABLE.PERCENT
FROM
(
SELECT PID, DEPTH, MIN(READING) AS MINR
FROM TABLE
WHERE READING>2
GROUP BY PID, DEPTH
) AS A LEFT JOIN TABLE
ON A.PID=TABLE.PID AND A.DEPTH=TABLE.DEPTH AND A.MINR=TABLE.READING
这样做是不是感觉更通用一些?
c*******e
发帖数: 8624
4
没人会这么做

【在 d****f 的大作中提到】
: 楼上的办法怎么感觉有点不通用阿,我目前自己有个办法,就是先按照PID,DEPTH分组
: ,求出MIN(Reading)
: SELECT PID, DEPTH, MIN(READING) AS MINR
: FROM TABLE
: WHERE READING>2
: GROUP BY PID, DEPTH
: 然后再基于上面的结论把原表JOIN过来
: SELEC A.PID, A.DEPTH, A.MINR, TABLE.PERCENT
: FROM
: (

d****f
发帖数: 313
5
why?

【在 c*******e 的大作中提到】
: 没人会这么做
B*****g
发帖数: 34098
6
因为这个版的人都知道partition by了。google一下就会了

【在 d****f 的大作中提到】
: why?
d****f
发帖数: 313
7
不好意思,可能偶的知识过时了,偶上次操作ACCESS是8年前了,Partition以前在自学SQL时(数据库系统概论)从没听过,可否稍微科普一下(省去我GOOGLE的时间)?另外我之前JOIN的做法有什么问题,是否也是一个教科书上的办法?怎么GOOGLE了一下Partition and rank好像SQL SERVER 2005才加入的新内容?
http://weblogs.sqlteam.com/jeffs/archive/2007/03/28/60146.aspx

【在 B*****g 的大作中提到】
: 因为这个版的人都知道partition by了。google一下就会了
B*****g
发帖数: 34098
8
1. access应该还不能用partition by。
2. 你的做法没问题,过时而已。
3. sql server好久没搞了,最近因工作需要才又搞了几下,不过我不看sql server的书
。看有没有其他sql server大拿跳出来给你建议。
4. sql server 2011就要出来了,呵呵。

【在 d****f 的大作中提到】
: 不好意思,可能偶的知识过时了,偶上次操作ACCESS是8年前了,Partition以前在自学SQL时(数据库系统概论)从没听过,可否稍微科普一下(省去我GOOGLE的时间)?另外我之前JOIN的做法有什么问题,是否也是一个教科书上的办法?怎么GOOGLE了一下Partition and rank好像SQL SERVER 2005才加入的新内容?
: http://weblogs.sqlteam.com/jeffs/archive/2007/03/28/60146.aspx

d****f
发帖数: 313
9
谢谢回复,不过我必须用过时的Access 2003(.MDB),也不需要什么SQL Server,有
个解决办法就可以,另外从我google的那个帖子看起来这种方法虽然过时,效率却很高
呢, ,看来凡事还是要具体分析的
http://weblogs.sqlteam.com/jeffs/archive/2007/03/28/60146.aspx

的书

【在 B*****g 的大作中提到】
: 1. access应该还不能用partition by。
: 2. 你的做法没问题,过时而已。
: 3. sql server好久没搞了,最近因工作需要才又搞了几下,不过我不看sql server的书
: 。看有没有其他sql server大拿跳出来给你建议。
: 4. sql server 2011就要出来了,呵呵。

c*******e
发帖数: 8624
10
如果有超过一条记录符合min的条件,你那么join得到的结果不唯一

【在 d****f 的大作中提到】
: 谢谢回复,不过我必须用过时的Access 2003(.MDB),也不需要什么SQL Server,有
: 个解决办法就可以,另外从我google的那个帖子看起来这种方法虽然过时,效率却很高
: 呢, ,看来凡事还是要具体分析的
: http://weblogs.sqlteam.com/jeffs/archive/2007/03/28/60146.aspx
:
: 的书

相关主题
How to write this SQL? Urgent!!!delete
请问T-SQL中Group By之后怎么找到特定的record请教SQL server的一个programming的问题,谢谢
问个基础的理论问题----数据库的基本差异Import 50GB data from multiple .txt file into MS SQL database
进入Database版参与讨论
d****f
发帖数: 313
11
我的Reading是唯一的,应该保证唯一性了吧
另外若Min(Reading)对应记录不唯一,用Partition,Rank可保证唯一吗
(假设可以用SQL Server 2005以上,不限定用ACCESS)?

【在 c*******e 的大作中提到】
: 如果有超过一条记录符合min的条件,你那么join得到的结果不唯一
a9
发帖数: 21638
12
怎么会不唯一呢。

,有
很高

【在 c*******e 的大作中提到】
: 如果有超过一条记录符合min的条件,你那么join得到的结果不唯一
d****f
发帖数: 313
13
他说的可能是Min(Reading)可能对应多个记录的情况(我这里无此情况),但是这样的
话,用Partition就能保证唯一性了吗?概念上感觉不行

【在 a9 的大作中提到】
: 怎么会不唯一呢。
:
: ,有
: 很高

a9
发帖数: 21638
14
min函数只会返回一条记录吧?

【在 d****f 的大作中提到】
: 他说的可能是Min(Reading)可能对应多个记录的情况(我这里无此情况),但是这样的
: 话,用Partition就能保证唯一性了吗?概念上感觉不行

c*******e
发帖数: 8624
15
min当然是唯一的,但是第二部join的时候不一定唯一.
qualify跟是否唯一无关,我用的row_number()就是唯一的
但是rank则不一定

【在 a9 的大作中提到】
: min函数只会返回一条记录吧?
d****f
发帖数: 313
16
join不唯一的话,就是事实上的记录不唯一了,比如Reading=4对应多条记录,那样的
话,无论用Partition还是用Join都无法保证唯一了吧,若是只返回一条记录,反而是错误的了

【在 c*******e 的大作中提到】
: min当然是唯一的,但是第二部join的时候不一定唯一.
: qualify跟是否唯一无关,我用的row_number()就是唯一的
: 但是rank则不一定

c*******e
发帖数: 8624
17
跟你想要什么有关,你想要都返回还是只要一条?
已经说过了,这个跟qualify或者partition无关,跟你用
rank还是row_number有关

错误的了

【在 d****f 的大作中提到】
: join不唯一的话,就是事实上的记录不唯一了,比如Reading=4对应多条记录,那样的
: 话,无论用Partition还是用Join都无法保证唯一了吧,若是只返回一条记录,反而是错误的了

d****f
发帖数: 313
18
感觉是个很简单的问题,跟原来的表原始内容,结构(比如Reading是不是会有重复)有
关,和用什么方法查询出来无关,如果真的是有重复的,就应该把重复的都列出来,只
要是qualify条件的,和rank,row_number无关

【在 c*******e 的大作中提到】
: 跟你想要什么有关,你想要都返回还是只要一条?
: 已经说过了,这个跟qualify或者partition无关,跟你用
: rank还是row_number有关
:
: 错误的了

c*******e
发帖数: 8624
19
你回答了第一个问题.如果你要重复就用rank,就这么简单.
还不明白的话,建议你改行.

【在 d****f 的大作中提到】
: 感觉是个很简单的问题,跟原来的表原始内容,结构(比如Reading是不是会有重复)有
: 关,和用什么方法查询出来无关,如果真的是有重复的,就应该把重复的都列出来,只
: 要是qualify条件的,和rank,row_number无关

1 (共1页)
进入Database版参与讨论
相关主题
有没有人对这些SQL SERVER 培训感兴趣啊借人气问一下:ACCESS转成SQL (转载)
想大牛们求教,怎么写SQL挑出每组的top 10记录How to write this SQL? Urgent!!!
SQL 请教请问T-SQL中Group By之后怎么找到特定的record
70-433 evaluation SQL 2008 Enterprise CD问个基础的理论问题----数据库的基本差异
partition 表delete
SQL,UNION问题请教SQL server的一个programming的问题,谢谢
问一下SAS SQL在大数据方面的处理Import 50GB data from multiple .txt file into MS SQL database
Access VS SQL Server 我应该怎么选择?[SQL求助] 取每个group的第一个record
相关话题的讨论汇总
话题: reading话题: pid话题: depth话题: sql话题: partition