RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1535988
Accepted
Diana Oryol
Diana Oryol
Asked:2023-08-15 17:57:20 +0000 UTC2023-08-15 17:57:20 +0000 UTC 2023-08-15 17:57:20 +0000 UTC

我们需要找到在车站连续停留的时间

  • 772

大家好。
有一个表:订户 ID、电台 ID、事件日期。
有必要求出在车站连续停留的时间。我在 Oracle 中解决,但随后我会将解决方案转移到 pySpark。
计算事件的持续时间,
如果下一个事件在同一站,则 flag_lead = 0;
如果上一个事件在同一站,则 flag_lag = 0。如果这些标志的值相乘,那么我就得到了对字符串进行分组的必要标准。

select subs_id,
       base_stat_id,
       subs_act_date,
       coalesce(lead(subs_act_date, 1)over(partition by subs_id order by subs_act_date), sysdate) as end_subs_act_date,
       coalesce(lead(subs_act_date, 1)over(partition by subs_id order by subs_act_date), sysdate)  - subs_act_date as duration,
       case when lead(base_stat_id, 1)over(partition by subs_id order by subs_act_date) = base_stat_id then 0 else 1 end *
       case when lag(base_stat_id, 1)over(partition by subs_id order by subs_act_date) = base_stat_id then 0 else 1 end as bs_flag
from (
select 1 as subs_id, 1 as base_stat_id, to_date('8:40', 'hh24:mi') as subs_act_date from dual
union all select 1,1,to_date('8:55', 'hh24:mi') from dual
union all select 1,1,to_date('9:20', 'hh24:mi') from dual
union all select 1,2,to_date('10:00', 'hh24:mi') from dual
union all select 1,1,to_date('11:15', 'hh24:mi') from dual
union all select 1,2,to_date('12:00', 'hh24:mi') from dual
union all select 1,2,to_date('13:50', 'hh24:mi') from dual
union all select 1,2,to_date('18:50', 'hh24:mi') from dual
union all select 1,1,to_date('18:55', 'hh24:mi') from dual
union all select 1,1,to_date('19:20', 'hh24:mi') from dual
)src_tab

在此输入图像描述

我不知道如何将数据从块 1 和 2 中分离出来。由于订户位于这些块之间的其他站点,因此不可能合并这些时间段内的停留时间。

sql
  • 1 1 个回答
  • 26 Views

1 个回答

  • Voted
  1. Best Answer
    Akina
    2023-08-15T18:16:04Z2023-08-15T18:16:04Z

    只需根据当前事件和先前事件位于同一站的事实对条目进行分组即可:

    WITH 
    
    -- исходные данные
    src_tab AS (
      select 1 as subs_id, 1 as base_stat_id, to_date('8:40', 'hh24:mi') as subs_act_date from dual
      union all select 1,1,to_date('8:55', 'hh24:mi') from dual
      union all select 1,1,to_date('9:20', 'hh24:mi') from dual 
      union all select 1,2,to_date('10:00', 'hh24:mi') from dual
      union all select 1,1,to_date('11:15', 'hh24:mi') from dual
      union all select 1,2,to_date('12:00', 'hh24:mi') from dual
      union all select 1,2,to_date('13:50', 'hh24:mi') from dual
      union all select 1,2,to_date('18:50', 'hh24:mi') from dual
      union all select 1,1,to_date('18:55', 'hh24:mi') from dual
      union all select 1,1,to_date('19:20', 'hh24:mi') from dual
    ),
    
    -- сравнение станций текущего и предыдущего событий
    cte AS (
    SELECT subs_id, base_stat_id, subs_act_date,
           CASE WHEN base_stat_id = LAG(base_stat_id) OVER (PARTITION BY subs_id 
                                                           ORDER BY subs_act_date)
                THEN 0
                ELSE 1 
                END AS station_changed
    from src_tab
    )
    
    -- подсчёт номера группы
    SELECT subs_id, base_stat_id, subs_act_date,
           SUM(station_changed) OVER (PARTITION BY subs_id 
                                      ORDER BY subs_act_date) group_number
    FROM cte
    
    SUBS_ID BASE_STAT_ID SUBS_ACT_DATE GROUP_NUMBER
    1 1 23 年 8 月 1 日 1
    1 1 23 年 8 月 1 日 1
    1 1 23 年 8 月 1 日 1
    1 2 23 年 8 月 1 日 2
    1 1 23 年 8 月 1 日 3
    1 2 23 年 8 月 1 日 4
    1 2 23 年 8 月 1 日 4
    1 2 23 年 8 月 1 日 4
    1 1 23 年 8 月 1 日 5
    1 1 23 年 8 月 1 日 5

    小提琴

    很明显,同一站连续发生的几个事件是编号为 1、4 和 5 的事件组。

    • 1

相关问题

  • 通过 OUT 参数从过程结果输出

  • ON 关键字附近的语法错误 - SQL

  • 多表查询中的 Count() 聚合函数

  • 根据时间更改单元格中的日期

  • phpMyAdmin 中的错误 #1064 SQL 查询

  • Qt:包含变量的数据库查询

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5