查询超过两个小时是一个值

sdfgrtyu 2017-02-23 11:43:06
查询同一个name下,cnm是时间列,age是同一个值,怎么写语句啊?
...全文
241 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2017-02-25
  • 打赏
  • 举报
回复
引用
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
.
ACMAIN_CHM 2017-02-25
  • 打赏
  • 举报
回复
建议楼主还是直接把想要的结果直接描述出来。
create table t (name char(1), age int, cnt datetime);


insert into t values ('a',20,'2017-02-25 07:12:34');
insert into t values ('a',20,'2017-02-25 07:12:38');
insert into t values ('a',20,'2017-02-25 07:12:40');
insert into t values ('a',20,'2017-02-25 07:12:42');
insert into t values ('a',20,'2017-02-25 07:13:18');
insert into t values ('a',20,'2017-02-25 07:13:20');
insert into t values ('a',20,'2017-02-25 09:13:20');
insert into t values ('b',20,'2017-02-25 07:18:42');
insert into t values ('b',20,'2017-02-25 09:20:18');
insert into t values ('b',20,'2017-02-25 09:23:20');

mysql> select * from t;
+------+------+---------------------+
| name | age  | cnt                 |
+------+------+---------------------+
| a    |   20 | 2017-02-25 07:12:34 |
| a    |   20 | 2017-02-25 07:12:38 |
| a    |   20 | 2017-02-25 07:12:40 |
| a    |   20 | 2017-02-25 07:12:42 |
| a    |   20 | 2017-02-25 07:13:18 |
| a    |   20 | 2017-02-25 07:13:20 |
| a    |   20 | 2017-02-25 09:13:20 |
| b    |   20 | 2017-02-25 07:18:42 |
| b    |   20 | 2017-02-25 09:20:18 |
| b    |   20 | 2017-02-25 09:23:20 |
+------+------+---------------------+
10 rows in set (0.00 sec)

mysql> select *
    -> from t a
    -> where not exists (
    ->  select 1
    ->  from t
    ->  where name=a.name
    ->  and cnt >= a.cnt-interval 2 hour
    ->  and cnt <a.cnt
    ->  and age !=a.age
    ->  )
    -> and age=(select age
    ->  from t
    ->  where name=a.name
    ->  and cnt < a.cnt-interval 2 hour
    ->  order by cnt desc
    ->  limit 1
    ->  )
    ->  ;
+------+------+---------------------+
| name | age  | cnt                 |
+------+------+---------------------+
| a    |   20 | 2017-02-25 09:13:20 |
| b    |   20 | 2017-02-25 09:20:18 |
| b    |   20 | 2017-02-25 09:23:20 |
+------+------+---------------------+
3 rows in set (0.00 sec)

mysql>
sdfgrtyu 2017-02-25
  • 打赏
  • 举报
回复
create table #t (name char(1), age int, cnt time(0))
sdfgrtyu 2017-02-25
  • 打赏
  • 举报
回复
引用 7 楼 ACMAIN_CHM 的回复:
引用
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
.
This is what I want results insert into #t values ('a',20,'07:12:34') insert into #t values ('a',20,'07:12:38') insert into #t values ('a',20,'07:12:40') insert into #t values ('a',20,'07:12:42') insert into #t values ('a',20,'07:13:18') insert into #t values ('a',20,'07:13:20') insert into #t values ('a',20,'09:13:20') insert into #t values ('b',20,'07:18:42') insert into #t values ('b',20,'09:20:18') insert into #t values ('b',20,'09:23:20') The result is a, b insert into #t values ('a',20,'07:12:34') insert into #t values ('a',20,'07:12:38') insert into #t values ('a',20,'07:12:40') insert into #t values ('a',17,'07:14:42') insert into #t values ('a',20,'07:13:18') insert into #t values ('a',20,'07:13:20') insert into #t values ('a',20,'09:13:20') insert into #t values ('b',20,'07:18:42') insert into #t values ('b',20,'09:20:18') insert into #t values ('b',20,'09:23:20') The result is b insert into #t values ('a',20,'07:12:34') insert into #t values ('a',20,'07:12:38') insert into #t values ('a',20,'07:12:40') insert into #t values ('a',17,'07:12:42') insert into #t values ('a',20,'07:13:18') insert into #t values ('a',20,'07:13:20') insert into #t values ('a',20,'07:13:20') insert into #t values ('a',20,'09:13:20') insert into #t values ('b',20,'07:18:42') insert into #t values ('b',20,'09:20:18') insert into #t values ('b',20,'09:23:20') The result is a,b
sdfgrtyu 2017-02-23
  • 打赏
  • 举报
回复
数据是每三秒钟一条
sdfgrtyu 2017-02-23
  • 打赏
  • 举报
回复
引用 3 楼 rucypli 的回复:
select * from tb a where exists (select 1 from tb b where a.name=b.name and a.age=b.age and a.cnn>date_add(b.cnn,INTERVAL 2 hour )
我的意思是这个意思:就是从每条数据开始的两个小时内,数据一直都没有变的才算复合
sdfgrtyu 2017-02-23
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
SELECT 
  DISTINCT
        a.*
FROM    test a
        JOIN test b ON a.name = b.name
                       AND a.age = b.age
WHERE   TIMESTAMPDIFF(HOUR, a.time, b.time) >= 2
hi,我的意思是这个意思 数据每三秒中一条,我要刷选的是从每条数据开始一直到两个小时之间,age值一直没有变的数据
rucypli 2017-02-23
  • 打赏
  • 举报
回复
select * from tb a where exists (select 1 from tb b where a.name=b.name and a.age=b.age and a.cnn>date_add(b.cnn,INTERVAL 2 hour )
二月十六 2017-02-23
  • 打赏
  • 举报
回复
SELECT 
DISTINCT
a.*
FROM test a
JOIN test b ON a.name = b.name
AND a.age = b.age
WHERE TIMESTAMPDIFF(HOUR, a.time, b.time) >= 2

202

社区成员

发帖
与我相关
我的任务
社区描述
非技术问题的乐园
数据库数据库架构数据库开发 技术论坛(原bbs)
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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