首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL -筛选连续的非空日期

MYSQL -筛选连续的非空日期
EN

Stack Overflow用户
提问于 2018-09-03 17:45:33
回答 2查看 159关注 0票数 0

只得到最大的约会:

这些是员工的报到和退房记录,有时他们会在系统中连续做两次或更多的记录。在这个样本中,连续有两次退房。假设这些行总是有序的,在结帐的情况下,我希望有最大的日期,而在签出的情况下,最小的日期。

在这种情况下,我希望这样做:

较小的日期不包括在内:

演示

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-03 18:57:26

试试这个,在这个大的CASE语句中,如果checkinnull切换到not null,然后反过来,我将逐个递增列。那么,按照本专栏分别对maxmin of checkoutcheckin进行分组就足够了:

代码语言:javascript
复制
select @checkinLag := null, @rn := 0;
select max(id), 
       functionario,
       loja, 
       min(checkin),
       max(checkout) 
from (
    select case when (checkinLag is null and checkin is not null) or
                     (checkinLag is not null and checkin is null)
                then @rn := @rn + 1 else @rn end rn,
           checkin,
           checkout,
           loja,
           id,
           functionario           
    from (
        select @checkinLag checkinLag,
               @checkinLag := checkin,
               checkin,
               checkout,
               loja,
               id,
               functionario
        from dummyTable
        order by coalesce(checkin, checkout)
    ) a
) a group by functionario, loja, rn

正如Gordon所指出的,我使用了子查询来保证计算表达式的顺序(分配和使用@checkinLag)。

演示

票数 0
EN

Stack Overflow用户

发布于 2018-09-03 18:45:02

我的解决方案:

代码语言:javascript
复制
Select
  *
from dummyTable base
where (base.checkout is null or not exists (
  select
    1
  from dummyTable co
  where co.checkout between base.checkout and DATE_ADD(base.checkout, INTERVAL 5 SECOND)
  and base.id <> co.id
  and base.functionario = co.functionario
  and base.loja = co.loja
)) and (base.checkin is null or not exists (
  select
    1
  from dummyTable ci
  where ci.checkin between DATE_SUB(base.checkin, INTERVAL 5 SECOND) and base.checkin
  and base.id <> ci.id
  and base.functionario = ci.functionario
  and base.loja = ci.loja
));

您可以测试查询这里。没有必要对行进行排序。我选择5秒作为应该忽略签入/退出的间隔。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52154305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档