怎样查询SQL数据库数值类型中某一个表中的某个列的一个数值的所有行数据

sql如何查询一个表中的后5行数据,不用排序
引用来自“Lesus”的答案
首先要知道一共有多少行 &n;
然后select * from tablename limit 5 offset n - 5;
delimiter $$
DROP PROCEDURE IF EXISTS lastNRow $$ -- 如果过程lastNRow存在就删除
CREATE PROCEDURE lastNRow(IN n INT)
DECLARE total INT DEFAULT 0; -- 定义总行数变量
DECLARE offLen INT DEFAULT 0; -- 定义跨度
SELECT COUNT(*) INTO
-- 将总行数赋值
set offLen := total - -- 计算跨度
SELECT * FROM tablename limit n offset offL -- 查询要求的记录
DELIMITER ;
CALL lastNRow(9); -- 调用过程。
--- 共有 1 条评论 ---
结果也许是楼主需要的,但这个是没意义的代码:“最后五行”这句话本身就隐含着排序的,如果楼主意思是“不排序的 随机的最后五行”, 那既然随机,最后五行和最前五行又有什么区别呢?
首先要知道一共有多少行 &n;
然后select * from tablename limit 5 offset n - 5;
--- 共有 8 条评论 ---
: 我在SQL SERVER下试过了,没问题
: 你这种写法是不完全正确的,count(1)是指第一个字段,如果第一个字段有很多为NULL时,那就悲剧了,统计的不是总行数了。
: select count(1) from table_name
: 能不能详细的写一下代码,多谢了
: 这种语法是不支持的,一种是分成两步做。另外一种是封装成函数。
不用排序。。。。。。。。。。。
获取总行数,然后用rowid作为WHERE过滤条件?
不排序怎么可能知道后5行是哪5行呢?
这个“后5行”是最后5行,还是后面5行? 楼主表述要准确
--- 共有 1 条评论 ---
不排序和后N行本身描述就是矛盾的。
楼主自己都不知道要干嘛
不排序,返回的后五行数据是随机的
也就是说limit 5就行了, 反正楼主也区分不出这5条是新是旧.
在程序代码中, 任务事务都有排序.
试试这个:
select count(*) from table
if(@count&=5)
&&&&select top 5 from table
select&top 5 from table t1
where t1.id not in(
&&&select& top ((select count(1) from table t2 ) -5)& t3.id&from table t3在SQL数据库中,怎么查询一个表中有哪些字段
--表的字段名称
select & name & from
& syscolumns & where
& id=object_id( '表名 ')
--表的字段数
select & count(name) & from
& syscolumns & where
& id=object_id( '表名 ')
最好改成:object_id(N '表名 ')
这样只是规范一些,一般不会出错
select & name & from
& syscolumns & where
& id=object_id(N '表名 ')--列名
select & name & from
& sysobjects & where
& xtype= 'U '--表名
select & name & from
& sysobjects & where
& xtype= 'P '--存储过程
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。下面是一个&MySQL&测试的表,
主要目的是通过一条&sql&得到&max(cordernumber)&所在行对应的&cvalue1
以及得到&min(cordernumber)&所在行对应的&cvalue1
create&table&c_test
cid&integer&primary&key&auto_increment,
cvalue1&integer,
cordernumber&integer,
cname&varchar(30)
这是样本数据:
insert&into&c_test&(cvalue1,&cordernumber,&cname)&values&(111,&222,&'hi');
insert&into&c_test&(cvalue1,&cordernumber,&cname)&&values&(222,&111,&'hi');
insert&into&c_test&(cvalue1,&cordernumber,&cname)&&values&(333,&333,&'hi');
insert&into&c_test&(cvalue1,&cordernumber,&cname)&values&(555,&666,&'hi');
insert&into&c_test&(cvalue1,&cordernumber,&cname)&&values&(666,&555,&'hi');
下面是查询的&sql:
select&cname,&cvalue1,&
max(cordernumber),&min(cordernumber)&from&c_test
group&by&cname
下面是输出结果:
cname,cvalue1,max(cordernumber),min(cordernumber)
-----&-------&-----------------&-----------------
hi,&&&111,&&&&666,&&&&&&&&&&&&&&111
下面是最终需要的查询sql:&
select&cname,&cvalue1,&
(这列如何写能得到&cvalue1&=&555)&(即&max(cordernumber)&所在行对应的&cvalue1&的值)&,
(这列如何写能得到&cvalue1&=&222)&(即&min(cordernumber)&所在行对应的&cvalue1&的值)&,
max(cordernumber),&min(cordernumber)&from&c_test
group&by&cname
请帮下忙,谢谢。
回复讨论(解决方案)
select&cvalue,&corderNumber
from&c_test
where&corderNumber&=&(select&max(corderNumber)&from&c_test)
select&cvalue.corderNumber
from&c_test
where&orderNumber&=&(select&min(corderNumber)&from&c_test)&
select&cvalue,&corderNumber
from&c_test
where&corderNumber&=&(select&max(corderNumber)&from&c_test)
select&cvalue.corderNumber
from&c_test
where&orderNumber&=&(select&min(corderNumber)&from&c_test)&
在实际上使用的&SQL&中,除了在&SQL&中用到那两个&Max,&与&Min&外,还有很多列是&Sum&与&Count&其他字段的,所以,不能通过拆成&Union&再合并,这样只能处理&Max&与&Min&&对应的,达不到最终想要的结果。
实际上的表是还有很多列,如下面的&column1,&column2,&column3,...等,请再帮下忙。
select&cname,&cvalue1,&
max(cordernumber),&min(cordernumber)&,&sum&(column1),&sum(column2),&count(column3),&.....
from&c_test
group&by&cname
select&cvalue,&corderNumber
from&c_test
where&corderNumber&=&(select&max(corderNumber)&from&c_test)
select&cvalue.corderNumber
from&c_test
where&orderNumber&=&(select&min(corderNumber)&from&c_test)&
在实际上使用的&SQL&中,除了在&SQL&中用到那两个&Max,&与&Min&外,还有很多列是&Sum&与&Count&其他字段的,所以,不能通过拆成&Union&再合并,这样只能处理&Max&与&Min&&对应的,达不到最终想要的结果。
实际上的表是还有很多列,如下面的&column1,&column2,&column3,...等,请再帮下忙。
select&cname,&cvalue1,&
max(cordernumber),&min(cordernumber)&,&sum&(column1),&sum(column2),&count(column3),&.....
from&c_test
group&by&cname
不明白你想要什么
from&(select&*&from&c_test&order&by&cordernumber&desc&limit&1)&a,(select&*&from&c_test&order&by&cordernumber&asc&limit&1)&
实际上想要的是:
我对一个数据表通过&Group&By&进行相关数值字段的求和与求总数,然后,再这个基础上,再加上两列用来得到所有这些聚合数据的一个最小值与最大值(就是例子中的&cordernumber)&,这个最小值与最大值是表示:在这一批聚合数据中是第一条记录或最后一条记录。
现在通过&max&,&min&可以得到这个&cordernumber&的最小与最大值了,但是,现在想在同一条查询&SQL&中,将与它相关联的其他列的一些字段也下起查出来。
select&cname,&cvalue1,&
max(cordernumber),&min(cordernumber)&,
(XXXXXXX)&as&'列A,该列的&cordernumber&=&max(cordernumber)',
(YYYYYYY)&as&'列B,该列的&cordernumber&=&min(cordernumber)'
sum&(column1),&sum(column2),&count(column3),,,,&sum(column30)
from&c_test
where&1=1&&&&2=2&&&&(有很多其他条件在这里)
group&by&cname
实际上,相当于下面的功能:
假设有这样一个聚合&function,它可以传入两列:
Function&TestFunction&(MaxColumnName,&OtherColumnName)
这里面&对&MaxColumnName&进行比较,记录最大的一个&MaxColumnName&的值,当最大值发生变化时,把&OtherColumnName&的值也在最大值变化时一起保存,
这样,得出来的结果就是,它可以知道最大值是在第几行,然后,把那一行的&OtherColumnName&的值也跟最大值一起关联起来。
最后,&return&的时候,就返回这个&OtherColumnName&的值,而不是返回&MaxColumnName&的最大值。
那么,在&SQL&里面,如何有上面的自定义&function&的话,应该就这样写,
select&cname,&cvalue1,&
max(cordernumber),&min(cordernumber)&,&
MAXTestFunction(cordernumber,&&cvalue1)&as&'What&I&Want&A',
MINTestFunction(cordernumber,&&cvalue1)&as&'What&I&Want&B',
sum&(column1),&sum(column2),&count(column3),&.....
from&c_test
group&by&cname
不知&MySQL&是不是有类似的方法可以实现这个??
结贴送分了}

我要回帖

更多关于 sql数据库序列号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信