Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中标识旅行的“开始”和“结束”日期?_Sql_Db2 - Fatal编程技术网

在SQL中标识旅行的“开始”和“结束”日期?

在SQL中标识旅行的“开始”和“结束”日期?,sql,db2,Sql,Db2,我想从如下表中获取旅行的开始和结束日期- 我试过MinDate,然后是MaxDate,按行号、国家/地区分组 而且 引导函数 首选结果 缺口和岛屿 试试这个: with tab (line_number, date, country) as (values (123456, date('2019-05-20'), 'London') , (123456, date('2019-05-21'), 'London') , (123456, date('2019-05-22'), 'London'

我想从如下表中获取旅行的开始和结束日期-

我试过MinDate,然后是MaxDate,按行号、国家/地区分组 而且 引导函数

首选结果

缺口和岛屿

试试这个:

with tab (line_number, date, country) as (values
  (123456, date('2019-05-20'), 'London')
, (123456, date('2019-05-21'), 'London')
, (123456, date('2019-05-22'), 'London')
, (123456, date('2019-06-27'), 'London')
, (123456, date('2019-06-28'), 'London')
, (123456, date('2019-06-29'), 'London')
, (123456, date('2019-06-30'), 'London')
, (123456, date('2019-07-01'), 'London')
)
, a as (
select t.*
-- OLAP function sums the "flags" computed below,
-- so each group with consecutive dates has its distinct group number
, sum
(
-- The expression below 
-- returns 1 if date of the current row is 1 day after the date of the previous row
-- in the corresponding group (line_number, country) ordered by date
-- and 0 otherwise
case when date = lag(date) over (partition by line_number, country order by date) + 1 day then 0 else 1 end
) over (partition by line_number, country order by date) grp_num
from tab t
)
select 
  line_number
, min(date) as start_date
, max(date) as end_date
, country
--, grp_num
from a
group by line_number, country, grp_num;

你能解释一下他的逻辑吗?为什么第二行MAX日期是1/07/2019?根据我的想法,接下来的日期应该被考虑为开始日期和结束日期。@ FA06第二行最大日期是1/07/2019,这是当他的第二次旅程结束并开始于27/06/2019时。@ KiranDesai是否能举例说明你的意思?阿披舍克帕拉沙,你的桌子上有旅行吗?谢谢你@Mark Barinstein。这个问题对我有效。我可以更改一些内容,以便能够直接从表中检索信息,从而填充您的with tab子句。你能帮我写这篇文章吗?这样我也能在Netezza中执行。所以我试着编辑,但一直给我错误。你能帮我写这个,这样我就可以在Netezza中执行了。所以我试着编辑,但一直给我错误。用制表符行号,日期,国家作为选择行号,日期,国家从每日使用量表中选择,a作为选择t.*,当日期=按行划分的滞后日期,按日期划分的国家订单+1天,然后0其他1结束按行划分的情况,国家/地区订单按日期grp\u num从选项卡t中选择行号,mindate作为开始日期,maxdate作为结束日期,country-,grp\u num从组中选择行号,国家/地区,grp\u num;错误^在char 458处找到日期预期和“或在”或“之间”或“在”或“是”