是从当前到2小时以前.还是随便哪个时间段持续2小时
从每条数据的时间开始算起
@博学多思: 怎么样才算是一条数据?你不是3秒一条吗
意思就是时间段内 count() 是 1 的呗。
是
@博学多思: 那你先写个sql 求 count,然后再查询它 where count = 1
@长蘑菇星人:
我写出来了,但是速度特别慢啊,几十万条数据三四十分钟啊
@博学多思: 时间上建索引呀
@长蘑菇星人: 建索引了
@博学多思: name呢 要不 时间 + name 建索引
@长蘑菇星人: 看看我写的,哪块有问题
SELECT * from table201611 as o1 where( select count(distinct JLD) from table201611 where UNIX_TIMESTAMP(STR_TO_DATE (DYSJ, '%Y%m%d %H%i%s')) between UNIX_TIMESTAMP(STR_TO_DATE (o1.DYSJ, '%Y%m%d %H%i%s')) and UNIX_TIMESTAMP(DATE_ADD(STR_TO_DATE (o1.DYSJ, '%Y%m%d %H%i%s'),INTERVAL 2 hour)) and TZBH=o1.TZBH )=1 and UNIX_TIMESTAMP(STR_TO_DATE (o1.DYSJ, '%Y%m%d %H%i%s'))<> (select max(UNIX_TIMESTAMP(STR_TO_DATE (DYSJ, '%Y%m%d %H%i%s'))) from table201611 where TZBH=o1.TZBH)
@博学多思: 这个。。时间不格式化不行么。。
@长蘑菇星人: 时间是varchar类型的
@长蘑菇星人: 20161105201046
@博学多思: orz 。。。
@博学多思: 那也不要转换
@长蘑菇星人: 怎么修改?
@博学多思: UNIX_TIMESTAMP(STR_TO_DATE (DYSJ, '%Y%m%d %H%i%s')) 直接写 DYSJ
@长蘑菇星人: UNIX_TIMESTAMP(DATE_ADD(STR_TO_DATE (o1.DYSJ, '%Y%m%d %H%i%s'),INTERVAL 2 hour))
这个怎么改?
@博学多思: 最好格式化成字符串 20161105201046
@长蘑菇星人: 怎么把字符串加上两个小时啊?说的具体点,不会写啊
@博学多思: 你最后把他变成字符串就好了啊
变成字符串yyyyMMddHHmmss( UNIX_TIMESTAMP(DATE_ADD(STR_TO_DATE (o1.DYSJ, '%Y%m%d %H%i%s'),INTERVAL 2 hour)) )
@长蘑菇星人: 不行啊,还没查出来那
@博学多思: 改成什么样了
@长蘑菇星人:
SELECT * from table201611 as o1 where( select count(distinct JLD) from table201611 where DYSJ between DYSJ and date_format(DATE_ADD(STR_TO_DATE (o1.DYSJ, '%Y%m%d %H%i%s'),INTERVAL 2 hour),'%Y%m%d %H%i%s') and TZBH=o1.TZBH )=1 and o1.DYSJ<> (select max(o1.DYSJ) from table201611 where TZBH=o1.TZBH)
@博学多思: between 后面写错了
@长蘑菇星人: 怎么写?
@博学多思: 你可不可以仔细点呀。
@长蘑菇星人: 没写错啊,哪里有问题?