我需要在 val = 'Y'col_val < 5 的条件下获得开始时间和结束时间。

我有一个名为 temp_vvv 结构的表,例如

date_time             |     val    |  col_val
-------------------------------------------------------------------------
03/06/2014 08:58:00         Y          4
03/06/2014 08:59:00         Y          3
03/06/2014 09:00:00         Y          1
03/06/2014 09:01:00         Y          0
03/06/2014 09:01:30         Y          0
03/06/2014 09:02:00         Y          2
03/06/2014 09:02:30         Y          5
03/06/2014 09:03:00         Y         20
03/06/2014 09:03:30         Y         50
03/06/2014 09:04:00         Y         55
03/06/2014 09:04:30         Y         60
03/06/2014 09:05:00         Y         10
03/06/2014 09:05:30         Y          4
03/06/2014 09:06:00         Y          2
03/06/2014 09:06:30         Y          0
03/06/2014 09:07:00         Y          0
03/06/2014 09:07:30         Y          1
03/06/2014 09:08:00         N          5
03/06/2014 09:08:30         N          0

我期待输出像
  start_date_time       |     end_date_time
 --------------------------------------------------
 03/06/2014 08:58:00         03/06/2014 09:02:00
 03/06/2014 09:05:30         03/06/2014 09:07:30

如何从选择查询中获取此输出

请帮我。

编辑

col_val '03/06/2014 08:58:00' 开始,到 '03/06/2014 09:02:00' 结束。所以第一条记录是 start_date_time 就是 '03/06/2014 08:58:00'end_date_time'03/06/2014 09:02:00' 等等。

如何实现?

最佳答案

您可以使用 ROW_NUMBER() 分析函数根据 COLCOL_VAL 对记录进行分组。

尝试使用以下查询,

SELECT MIN(date_time) start_date_time, MAX(date_Time) end_date_time
FROM(
    SELECT date_time, val, col_val, CASE WHEN val = 'Y' AND col_val < 5 THEN 1 ELSE 0 END col_val_limit,
                  ROW_NUMBER() OVER (ORDER BY DATE_TIME) -
          ROW_NUMBER() OVER (PARTITION BY CASE WHEN val = 'Y' AND col_val < 5 THEN 1 ELSE 0 END ORDER BY DATE_tIME) grp
    FROM    temp_vw
    )
WHERE  col_val_limit = 1
GROUP BY grp
ORDER BY start_date_time;

关于sql - 在时间范围内对数据进行分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24007291/

10-10 18:03
查看更多