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

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

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

谁可以解决,马上给分。

msn:tspbwf@hotmail.com




...全文
398 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)
内容概要:本文针对复杂威胁环境下多无人机的协同路径规划问题,提出一种基于多段杜宾斯(Dubins)路径的优化方法,旨在实现高动态、高风险场景中无人机群的安全、高效与协同飞行。研究充考虑无人机的实际飞行约束,如最小转弯半径与连续曲率要求,采用杜宾斯曲线构建平滑且符合动力学特性的路径段,并结合优化算法对多机路径进行协同规划,有效规避静态威胁区域与动态障碍物,避免飞行器间发生碰撞。方案在Matlab平台上完成仿真验证,结果表明该方法能够在城市、军事等复杂环境中实现多无人机系统的路径最短化、能耗最低化、安全性最大化与实时性兼顾的多目标优化,具有较强的工程应用潜力。; 适合人群:具备无人机控制、路径规划或智能优化算法基础的科研人员与工程技术人员,特别适用于自动化、航空航天、机器人及相关领域的研究生、高校教师及工业界研发人员。; 使用场景及目标:①应用于复杂城市、战场等高威胁环境下的多无人机协同任务,如侦察监视、应救援、集群打击与编队巡航;②为解决多无人机系统中的动态避障、冲突消解、路径平滑与资源协同配等关键技术问题提供理论依据与算法实现参考;③帮助研究人员深入理解Dubins路径在多智能体协同运动规划中的建模方式与优化机制,推动其在无人系统自主导航中的实际落地。; 阅读建议:建议读者结合提供的Matlab代码深入研读算法实现流程,重点析威胁建模策略、多机冲突协调机制以及多目标代价函数的设计思路,可通过调整环境参数与优化权重在仿真中观察路径生成效果,从而深对协同决策、运动学约束与全局优化之间耦合关系的理解。
内容概要:本文围绕“基于飞机配电优化负荷管理系统研究”展开,利用Matlab代码实现相关建模仿真与优化析,旨在提升飞机配电系统的效率与可靠性。研究重点针对飞机电力系统中的动态负荷配问题,构建了综合考虑电源容量限制、负载优先级划、供电安全性、能量消耗最小化及系统冗余能力的多约束优化模型。通过引入先进智能优化算法对模型进行高效求解,实现了对机载关键与非关键设备的科学化、智能化供电管理。文中详细展示了算法迭代过程、收敛性析及不同工况下的仿真结果,验证了该方法在降低整体能耗、均衡电力负载、增强系统稳定性以及应对突发用电需求等方面的优越性能,为现代民用与军用航空器电力系统的自主决策与健康管理提供了坚实的理论支撑与可行的技术路径。; 适合人群:具备电力系统、自动化或航空航天工程背景,熟练掌握Matlab编程语言,从事飞机电气系统设计、航空器能源管理、智能优化算法应用或相关领域研究的科研人员、工程师及研究生。; 使用场景及目标:①应用于新型飞机电气系统的设计与仿真验证,优化机载设备的供电策略与能量管理逻辑;②为复杂封闭电力系统(如舰船、空间站)中的负荷调度与应电源管理提供可借鉴的解决方案,以提升系统整体能效、安全等级与运行韧性。; 阅读建议:建议结合提供的Matlab代码深入理解优化模型的数学建模过程、约束条件的程序化表达及智能算法的具体实现细节,重点关注目标函数的设计思路、权重系数的选取对优化结果的影响,并可尝试将模型拓展至多目标优化、实时滚动优化或考虑设备故障预测的主动负荷管理等更复杂的应用场景。

34,876

社区成员

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

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