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

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

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

谁可以解决,马上给分。

msn:tspbwf@hotmail.com




...全文
413 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)
内容概要:本文围绕基于PI双闭环解耦控制的三相电压型PWM整流器在第四象限运行的仿真研究展开,重点析其在电流反向流动工况下的控制性能。通过Simulink搭建系统模型,采用电压外环与电流内环构成的双闭环PI控制策略,并引入d-q轴解耦环节以消除交叉耦合影响,实现对整流器在能量回馈状态下的高精度、稳定控制。研究涵盖了系统数学建模、控制器参数设计、解耦算法实现及动态响应仿真验证,充展示了该控制方法在抑制扰动、提升系统鲁棒性方面的有效性。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事新能源变流器、电能质量治理或工业传动系统开发的工程技术人员;具备自动控制理论基础和Simulink仿真能力者更佳。; 使用场景及目标:①深入掌握三相电压型PWM整流器的工作原理及其在不同运行象限的能量流动特性;②理解并实践PI双闭环控制系统的设计思路与参数整定方法;③学习d-q坐标系下电流解耦控制的实现机制;④熟练运用Simulink进行电力电子系统建模与仿真析;⑤为实际工程中实现高效能量双向变换提供理论依据与技术参考。; 阅读建议:建议结合Simulink环境同步搭建模型,细致析各模块的信号流向与控制逻辑,重点关注电流内环的动态跟踪能力和电压外环的稳态调节性能,可通过改变负载突变、电网电压波动等条件进行对比实验,进一步评估系统的抗干扰能力与稳定性表现。

34,875

社区成员

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

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