如何取出每组里的前二十条记录并分组?加我MSN也可以。在线急等。解决就给分。

pbwf 2006-11-28 10:38:35
select max(温度) from 温度记录 group by 批次号 这样是取出每组最大温度
伟 说:
select top 20 温度 from 温度记录 order by 时间是取出每组按时间排序的前20个,怎么把这两条,结合在一起。

可能我有若干个组(就是有很多个批次号,第一个批次有很多记录,这些记录属于某个批次),每组记录数都不定。我只要每组满足时间限制的前二十条。

谁可以解决,马上给分。

msn:tspbwf@hotmail.com




...全文
443 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhdyj 2006-11-29
  • 打赏
  • 举报
回复
......
等着接分...
^_^
danmali 2006-11-28
  • 打赏
  • 举报
回复
我也很想知道,谁来回答以下
danmali 2006-11-28
  • 打赏
  • 举报
回复
楼主的意思是
两个表
A表是批次,B表是所有批次的纪录
比如

A 里面的批次类别现在不知道有多少,比如现在有3条
AId Aname
1 first
2 second
3 third

B 使所有的记录
BId Bname AId
01 value1 1
02 value2 1
03 value3 1
04 value4 2
05 value5 2
06 value6 2
07 value7 3
08 value8 3
09 value9 3
010 value10 3
011 value11 2
012 value12 2
013 value13 3
014 value14 3
015 value15 1

B表中现在有15条记录 属于1的有4条 属于2得有5条 属于3的有6条

现在需要一个方法搜索出所属批次的前2条记录的一个集合,就是说现在上面假定有3个批次,那么搜索出的结果集合是6条纪录,就是说每个类别的最大的两条纪录的集合,最主要这个类别是不定的

Result
BId Bname AId
015 value15 1
03 value3 1
012 value12 2
011 value11 2
010 value10 3
09 value9 3

dawugui 2006-11-28
  • 打赏
  • 举报
回复
假设T表为你取出来的温度最高的前20个。

select a.* from T,
(select 批次号,max(温度) as 温度 from T group by 批次号) b
where a.批次号 = b.批次号 and a.温度 = b.温度

我都说了,你给出数据和想要的结果.

比如数据是:
...................

结果是:
..................
pbwf 2006-11-28
  • 打赏
  • 举报
回复
前20个,是按时间先取出来的。指同一批次中。然后取出的这20个记录中,我要温度最大的。
而不是直接取一个批次中,温度最高的前20个。
pbwf 2006-11-28
  • 打赏
  • 举报
回复
我只想要
960511 1187
960512 1171这种的,左面一个批次,只出现一回。
dawugui 2006-11-28
  • 打赏
  • 举报
回复
只要每个批次的最大值?
pbwf 2006-11-28
  • 打赏
  • 举报
回复
楼上的老师,可以加我一下MSN吗?我的MSN:tspbwf@hotmail.com

结果是要单一的。比如上面语句出来的是
批次号 温度
960511 1187
960512 1171
960511 1058
960511 965
960511 992
960511 1018
960511 925
960511 1161
960511 1067
960511 1187
960511 1094
960511 923
960511 1042
960511 949
960511 976
960511 1118
960511 1145
960511 1051
960511 1171
960511 1078
960511 1007
960511 1033
960511 940
960512 1069
960512 975
960512 909
960512 1144
960512 1171
960512 1100
960512 1006
960512 1104
960512 1033
960512 940
960512 1060
960512 966
960512 1135
960512 1117
960512 1046
960512 1144
960512 1073
960512 979
960512 1006
960512 913
960512 939

我只想要
960511 1099
960512 1199
这种的,左面一个批次,只出现一回。
dawugui 2006-11-28
  • 打赏
  • 举报
回复
你给点数据和需要的结果.
pbwf 2006-11-28
  • 打赏
  • 举报
回复
上面朋友出来的结果是这样的
批次号 温度
960511 1187
960512 1171
960511 1058
960511 965
960511 992
960511 1018
960511 925
960511 1161
960511 1067
960511 1187
960511 1094
960511 923
960511 1042
960511 949
960511 976
960511 1118
960511 1145
960511 1051
960511 1171
960511 1078
960511 1007
960511 1033
960511 940
960512 1069
960512 975
960512 909
960512 1144
960512 1171
960512 1100
960512 1006
960512 1104
960512 1033
960512 940
960512 1060
960512 966
960512 1135
960512 1117
960512 1046
960512 1144
960512 1073
960512 979
960512 1006
960512 913
960512 939

我想出来左面就是批次号,而不是重复的,有多少批次,左面就显示多少,右面是满足这个批次的前二十条记录(按时间排)
dawugui 2006-11-28
  • 打赏
  • 举报
回复
第一个给错了,是排序的.

分类取前N个记录的SQL语句

有一个表AAA,结构如下:
类别编号 说明 排序
a aa 1
a aa2 2
a aa3 3
b bb 1
b bb2 2
b bb3 3
c cc 1
c cc2 2
c cc3 3
需要查询出来的结果是每个类别的头2条记录,按排序进行排序,结果如下:
类别编号 说明 排序
a aa 1
a aa2 2
b bb 1
b bb2 2
c cc 1
c cc2 2


if object_id('pubs..t1') is not null
drop table t1
go

create table t1(
类别编号 varchar(10),
说明 varchar(10),
排序 int
)
insert into t1(类别编号,说明,排序) values('a','aa',1)
insert into t1(类别编号,说明,排序) values('a','aa2',2)
insert into t1(类别编号,说明,排序) values('a','aa3',3)
insert into t1(类别编号,说明,排序) values('b','bb',1)
insert into t1(类别编号,说明,排序) values('b','bb2',2)
insert into t1(类别编号,说明,排序) values('b','bb3',3)
insert into t1(类别编号,说明,排序) values('c','cc',1)
insert into t1(类别编号,说明,排序) values('c','cc2',2)
insert into t1(类别编号,说明,排序) values('c','cc3',3)

select * from t1 as t
where (select count(*) from t1 where 类别编号 = t.类别编号 and 排序 < t.排序) < 2

drop table t1


类别编号 说明 排序
---------- ---------- -----------
a aa 1
a aa2 2
b bb 1
b bb2 2
c cc 1
c cc2 2

(所影响的行数为 6 行)
pbwf 2006-11-28
  • 打赏
  • 举报
回复
序号 批次号 时间 温度 钢定号

100 1 2006-1-1 105 1001

101 2 2006-2-2 88 1002

表中用到的,就是这些字段了。批次号为分组的依据。很多记录属于某一个批次号。
dawugui 2006-11-28
  • 打赏
  • 举报
回复
select 批次号 , max(温度) as 温度 from 温度记录 group by 批次号
union all
select 批次号 , 温度 from 温度记录 t where (select count(*) from 温度记录 where 批次号 = t.批次号 and 温度 > t.温度) <= 20
dawugui 2006-11-28
  • 打赏
  • 举报
回复
select top 20 温度 from 温度记录 order by 时间是取出每组按时间排序的前20个??这个不行吧.

按某一字段分类排序

有一表
a b c
7 aa 153
9 aa 152
6 aa 120
8 aa 168
5 bb 159
7 bb 179
8 bb 149
9 bb 139
6 bb 169
对b列中的值来分类排序并分别加一序号,形成一新表
px a b c
1 6 aa 120
2 9 aa 152
3 7 aa 153
4 8 aa 168
1 9 bb 139
2 8 bb 149
3 5 bb 159
4 6 bb 169
5 7 bb 179


declare @tab table(a int,b varchar(2),c int)

insert @tab values(7,'aa',153)
insert @tab values(9,'aa',152)
insert @tab values(6,'aa',120)
insert @tab values(8,'aa',168)
insert @tab values(5,'bb',159)
insert @tab values(7,'bb',179)
insert @tab values(8,'bb',149)
insert @tab values(9,'bb',139)
insert @tab values(6,'bb',169)

select * from @tab

select px=(select count(1) from @tab where b=a.b and c<a.c)+1 , a,b,c from @tab a
order by b , c

px a b c
----------- ----------- ---- -----------
1 6 aa 120
2 9 aa 152
3 7 aa 153
4 8 aa 168
1 9 bb 139
2 8 bb 149
3 5 bb 159
4 6 bb 169
5 7 bb 179

(所影响的行数为 9 行)


在上面例中我们看到,以B分类排序,C是从小到大,如果C从大到小排序,即下面结果:
px a b c
1 8 aa 168
2 9 aa 153
3 7 aa 152
4 6 aa 120
1 7 bb 179
2 6 bb 169
3 5 bb 159
4 8 bb 149
5 9 bb 139

declare @tab table(a int,b varchar(2),c int)

insert @tab values(7,'aa',153)
insert @tab values(9,'aa',152)
insert @tab values(6,'aa',120)
insert @tab values(8,'aa',168)
insert @tab values(5,'bb',159)
insert @tab values(7,'bb',179)
insert @tab values(8,'bb',149)
insert @tab values(9,'bb',139)
insert @tab values(6,'bb',169)

select * from @tab

select px=(select count(1) from @tab where b=a.b and c>a.c)+1 , a,b,c from @tab a
order by b , c desc

px a b c
----------- ----------- ---- -----------
1 8 aa 168
2 7 aa 153
3 9 aa 152
4 6 aa 120
1 7 bb 179
2 6 bb 169
3 5 bb 159
4 8 bb 149
5 9 bb 139

(所影响的行数为 9 行)

hhhdyj 2006-11-28
  • 打赏
  • 举报
回复
刚才写错了,应该是按时间派,刚才取得是温度最大的
SELECT 温度, 批次号
FROM 温度记录 T
WHERE (SELECT COUNT(1) FROM 温度记录 WHERE 批次号 = T.批次号 AND 时间 >= T.时间) <=20
ORDER BY 批次号, 温度 DESC
marco08 2006-11-28
  • 打赏
  • 举报
回复
--參考
http://community.csdn.net/Expert/topic/4845/4845108.xml?temp=.9047205
caixia615 2006-11-28
  • 打赏
  • 举报
回复
select top 20* from 温度记录 order by 温度,时间
hhhdyj 2006-11-28
  • 打赏
  • 举报
回复
后面可以加order by 批次号, 温度 DESC
hhhdyj 2006-11-28
  • 打赏
  • 举报
回复
SELECT 温度, 批次号
FROM 温度记录 T
WHERE (SELECT COUNT(1) FROM 温度记录 WHERE 批次号 = T.批次号 AND 温度 >= T.温度) <=20
marco08 2006-11-28
  • 打赏
  • 举报
回复
--把表結構和數據貼出來看看
加载更多回复(1)
内容概要:本文针对交直流混合数据中心园区的能源供应与算力资源协同问题,提出了一种多源-算力协同供电协调规划方法。该方法深度融合电力系统与信息计算系统,综合考虑光伏、风电、市电等多种能源形式与算力负载的时空耦合特性,通过构建多目标优化模型实现能源供给与算力需求的动态匹配与联合优化。研究设计了兼顾经济性、能效性与供电可靠性的综合评价体系,并采用Matlab进行建模仿真,对不同运行场景下的规划方案进行了对比析,有效验证了所提方法在降低综合运营成本、提升能源利用效率和增强系统韧性的优越性能。; 适合人群:具备电力系统、能源管理、计算机系统或自动化等相关专业背景,从事数据中心、综合能源系统(IES)、新能源优化、算力网络等交叉领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为交直流混合架构的数据中心园区提供科学合理的多能协同供电与算力资源联合规划方案;②实现算力任务调度与多源供电策略的深度协调优化,最大化可再生能源消纳,提升整体能源效率与系统运行可靠性;③为其他涉及“能源-信息”深度融合的综合能源系统优化调度研究提供理论参考与Matlab代码实现基础。; 阅读建议:本文是典型的跨学科交叉研究,阅读时应重点关注其多目标优化建模的构建逻辑、多源-算力协同机制的设计原理以及目标函数与约束条件的数学表达。建议结合所提供的Matlab代码,动手复现仿真过程,深入理解模型求解细节,从而更好地掌握该方法的核心思想,并尝试将其迁移应用于自身相关的优化问题研究中。

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧