我需要在 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()
分析函数根据 COL
和 COL_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/