请教高手:如何获取数据表中的首位两条数据
时间:2011-08-01
来源:互联网
区域 时间 内容
area time context
A 8:00 1
A 8:01 2
...
A 9:00 1
B 9:01 2
B 9:02 1
...
B 9:10 2
A 9:11 1
...
我想获得表a中在A区域的第一条和最后一条数据,也就是A 8:00 1~ A 9:00 1,当区域变成B时获取同理B区域的第一条和最后一条数据,当又变成A时获取第一条和最后一条数据 请问 这该怎么实现,谢谢!!
作者: taiyangzhiya 发布时间: 2011-08-01
作者: taiyangzhiya 发布时间: 2011-08-01
作者: taiyangzhiya 发布时间: 2011-08-01
Select * From 表a limit 1 union all (select * from 表a order by time desc limit 1)
作者: lxq19851204 发布时间: 2011-08-01
SET @b='';
SELECT bz,MAX(TIME),MIN(TIME) FROM (
SELECT *,@a:=IF(@b=`area`,@a,@a+1) AS bz,@b:=`area` FROM tth) a GROUP BY bz
作者: wwwwb 发布时间: 2011-08-01
作者: iihero 发布时间: 2011-08-01
SELECT * FROM TTH C LEFT JOIN (
SELECT bz,MAX(ID) AS MA ,MIN(ID) AS MI FROM (
SELECT *,@a:=IF(@b=`area`,@a,@a+1) AS bz,@b:=`area` FROM tth) a GROUP BY bz) D
ON C.ID=D.MA
LEFT JOIN TTHC E ON E.ID=D.MI
作者: wwwwb 发布时间: 2011-08-01
SQL code
Select * From 表a limit 1
union all
(select * from 表a order by time desc limit 1)
区域 时间段
A 8:00-9:00
B 9:01-9:10
A 9:11-....
作者: taiyangzhiya 发布时间: 2011-08-01
4楼的代码 假设你的时间按时间排序,如果没有 顺序,加入自增字段ID,
SELECT * FROM TTH C LEFT JOIN (
SELECT bz,MAX(ID) AS MA ,MIN(ID) AS MI FROM (
SELECT *,@a:=IF(@b=`area`,@a,@a+1) AS bz,@b:=`area` FROM tth) a GROUP BY bz) D
……
作者: taiyangzhiya 发布时间: 2011-08-01
作者: wwwwb 发布时间: 2011-08-01
什么地方不明白
作者: taiyangzhiya 发布时间: 2011-08-01
@是用户级变量。
看MYSQL官方手册吧。
作者: ACMAIN_CHM 发布时间: 2011-08-01
引用 9 楼 wwwwb 的回复:
什么地方不明白
因为偶还是菜鸟,对set和@的用法不明白
简单地说,对变量赋值,将所有AERA相同的记录归为1组
作者: wwwwb 发布时间: 2011-08-01
select * from 数据库中有个表a t where a.area != (select area from 数据库中有个表a where 时间<a.时间 order by 时间 desc limit 1) or a.area != (select area from 数据库中有个表a where 时间>a.时间 order by 时间 limit 1)
作者: ACMAIN_CHM 发布时间: 2011-08-01
SQL code
select * from 数据库中有个表a t
where a.area != (select area from 数据库中有个表a where 时间<a.时间 order by 时间 desc limit 1)
or a.area != (select area from 数据库中有个表a where 时间>a.时间 order by 时间 limit 1)
因为表中的数据是时刻在变化的,所以 where 时间>a.时间 时间并不能写固定的,我放了个combobox控件来选择时间,比如今天8:00-10:00 ,然后得出在这段时间内处于A区,B区,A区,...等的首尾两条数据。
作者: taiyangzhiya 发布时间: 2011-08-01
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
作者: ACMAIN_CHM 发布时间: 2011-08-01
作者: wwwwb 发布时间: 2011-08-01
A 8:00..
A 8:01..
...
A 9:00..
接下来跳到B区了
B 9:01
B 9:02
...
B 9:10
接下来又回到A区了
A: 9:11
...
要实现的结果列表:
A 8:00 -9:00
B 9:01 -9:10
A 9:11 -10:00
作者: taiyangzhiya 发布时间: 2011-08-01
4楼的代码测试没有
作者: taiyangzhiya 发布时间: 2011-08-01
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28