数据库中有个表a,它里面的数据是
区域 时间 内容
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时获取第一条和最后一条数据 请问 这该怎么实现,谢谢!!
区域 时间 内容
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时获取第一条和最后一条数据 请问 这该怎么实现,谢谢!!
union all
(select * from 表a order by time desc limit 1)
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
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
区域 时间段
A 8:00-9:00
B 9:01-9:10
A 9:11-....
@是用户级变量。看MYSQL官方手册吧。
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区,...等的首尾两条数据。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
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
mysql> SET @a=0;
Query OK, 0 rows affected (0.00 sec)mysql> SET @b='';
Query OK, 0 rows affected (0.00 sec)mysql> SELECT bz,`AREA`,MAX(TIME),MIN(TIME) FROM (
-> SELECT *,@a:=IF(@b=`area`,@a,@a+1) AS bz,@b:=`area` FROM tth) a GROUP BY
bz,`AREA`;
+------+------+-----------+-----------+
| bz | AREA | MAX(TIME) | MIN(TIME) |
+------+------+-----------+-----------+
| 1 | A | 09:00:00 | 08:00:00 |
| 2 | B | 09:10:00 | 09:01:00 |
| 3 | A | 09:11:00 | 09:11:00 |
+------+------+-----------+-----------+
3 rows in set (0.00 sec)mysql>
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
测试
(
Select *, row_number() over(order by 你的表Id) as rowNum
From 你的数据表
)
select * from X
where rowNum =1 or rowNum =Max(rowNum)