Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.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
Hive 如果连续行之间的差异小于10天,则生成排名/编号_Hive - Fatal编程技术网

Hive 如果连续行之间的差异小于10天,则生成排名/编号

Hive 如果连续行之间的差异小于10天,则生成排名/编号,hive,Hive,需要配置单元查询来计算连续记录的日期差异,但对于相同的txn类型,如果差异小于10,则生成相同的编号,否则生成新编号 with test_data as ( SELECT 1 txn_id, 'T100' txn_type, to_date('26-AUG-2015','DD-MON-YYYY') txn_date from dual union all SELECT 2 txn_id, 'T100', to_date('03-NOV-2015','DD-MON-YYYY') from du

需要配置单元查询来计算连续记录的日期差异,但对于相同的txn类型,如果差异小于10,则生成相同的编号,否则生成新编号

with test_data as (
 SELECT 1 txn_id, 'T100' txn_type, to_date('26-AUG-2015','DD-MON-YYYY') txn_date from dual union all
 SELECT 2 txn_id, 'T100', to_date('03-NOV-2015','DD-MON-YYYY') from dual union all
 SELECT 3 txn_id, 'T100', to_date('05-DEC-2015','DD-MON-YYYY') from dual union all
 SELECT 4 txn_id, 'T100', to_date('08-DEC-2015','DD-MON-YYYY') from dual union all
 SELECT 5 txn_id, 'T100', to_date('25-JAN-2016','DD-MON-YYYY') from dual union all
 SELECT 6 txn_id, 'T111', to_date('26-JAN-2016','DD-MON-YYYY') from dual union all
 SELECT 7 txn_id, 'T200', to_date('02-FEB-2016','DD-MON-YYYY') from dual union all
 SELECT 8 txn_id, 'T200', to_date('07-MAY-2016','DD-MON-YYYY') from dual union all
 SELECT 9 txn_id, 'T200', to_date('12-MAY-2016','DD-MON-YYYY') from dual union all
 SELECT 10 txn_id, 'T200', to_date('20-MAY-2016','DD-MON-YYYY') from dual),
 markers as (
select td.*, 
       case when td.txn_date - nvl(lag(td.txn_date) 
           over ( partition by txn_type order by txn_id ), td.txn_date-9999) > 10 
           THEN 'Y' ELSE NULL end new_txn_marker from test_data td )
SELECT txn_id, txn_type,txn_date, 
       count(new_txn_marker) over ( partition by txn_type order by txn_id ) "NUMBER" 
FROM  markers;
输入表 预期产量
使用公共表表达式标记差异超过10天的行,然后对这些行进行计数以获得新的数字

with test_data as (
 SELECT 1 txn_id, 'T100' txn_type, to_date('26-AUG-2015','DD-MON-YYYY') txn_date from dual union all
 SELECT 2 txn_id, 'T100', to_date('03-NOV-2015','DD-MON-YYYY') from dual union all
 SELECT 3 txn_id, 'T100', to_date('05-DEC-2015','DD-MON-YYYY') from dual union all
 SELECT 4 txn_id, 'T100', to_date('08-DEC-2015','DD-MON-YYYY') from dual union all
 SELECT 5 txn_id, 'T100', to_date('25-JAN-2016','DD-MON-YYYY') from dual union all
 SELECT 6 txn_id, 'T111', to_date('26-JAN-2016','DD-MON-YYYY') from dual union all
 SELECT 7 txn_id, 'T200', to_date('02-FEB-2016','DD-MON-YYYY') from dual union all
 SELECT 8 txn_id, 'T200', to_date('07-MAY-2016','DD-MON-YYYY') from dual union all
 SELECT 9 txn_id, 'T200', to_date('12-MAY-2016','DD-MON-YYYY') from dual union all
 SELECT 10 txn_id, 'T200', to_date('20-MAY-2016','DD-MON-YYYY') from dual),
 markers as (
select td.*, 
       case when td.txn_date - nvl(lag(td.txn_date) 
           over ( partition by txn_type order by txn_id ), td.txn_date-9999) > 10 
           THEN 'Y' ELSE NULL end new_txn_marker from test_data td )
SELECT txn_id, txn_type,txn_date, 
       count(new_txn_marker) over ( partition by txn_type order by txn_id ) "NUMBER" 
FROM  markers;

不确定少于10天是否意味着严格或非严格不平等,但除此之外:

with
     inputs ( txn_id, txn_type, txn_date ) as (
       select  1, 'T100', to_date('26-Aug-2015', 'dd-Mon-yy') from dual union all
       select  2, 'T100', to_date('03-Nov-2015', 'dd-Mon-yy') from dual union all 
       select  3, 'T100', to_date('05-Dec-2015', 'dd-Mon-yy') from dual union all
       select  4, 'T100', to_date('08-Dec-2015', 'dd-Mon-yy') from dual union all
       select  5, 'T100', to_date('25-Jan-2016', 'dd-Mon-yy') from dual union all
       select  6, 'T111', to_date('26-Jan-2016', 'dd-Mon-yy') from dual union all
       select  7, 'T200', to_date('02-Feb-2016', 'dd-Mon-yy') from dual union all
       select  8, 'T200', to_date('07-May-2016', 'dd-Mon-yy') from dual union all
       select  9, 'T200', to_date('12-May-2016', 'dd-Mon-yy') from dual union all
       select 10, 'T200', to_date('20-May-2016', 'dd-Mon-yy') from dual
     ),
     prep ( txn_id, txn_type, txn_date, ct ) as (
       select txn_id, txn_type, txn_date, 
              case when txn_date < lag(txn_date) over (partition by txn_type
                           order by txn_date) + 10 then 0 else 1 end
       from   inputs
     )
select txn_id, txn_type, txn_date, 
       sum(ct) over (partition by txn_type order by txn_date) as number_
from prep;

我使用number_uu作为列名;不要使用Oracle保留字作为表名或列名,除非你的生命取决于它,即使如此。

这里面有什么问题吗?也许你应该去看看如果你想得到答案,你得问个问题。。。。如果你要我们写你的代码。所以不批准,所以是为了帮助找到原因并修复代码中的问题。在为发布的需求编写代码时,您忘记添加解释问题的部分。使用option更新您的问题,使其包含遗漏的部分。@Pshemo但这个问题确实很有趣。我仍然想不出它是如何通过OracleAccess实现的。什么是access查询?你的意思是微软访问?
with
     inputs ( txn_id, txn_type, txn_date ) as (
       select  1, 'T100', to_date('26-Aug-2015', 'dd-Mon-yy') from dual union all
       select  2, 'T100', to_date('03-Nov-2015', 'dd-Mon-yy') from dual union all 
       select  3, 'T100', to_date('05-Dec-2015', 'dd-Mon-yy') from dual union all
       select  4, 'T100', to_date('08-Dec-2015', 'dd-Mon-yy') from dual union all
       select  5, 'T100', to_date('25-Jan-2016', 'dd-Mon-yy') from dual union all
       select  6, 'T111', to_date('26-Jan-2016', 'dd-Mon-yy') from dual union all
       select  7, 'T200', to_date('02-Feb-2016', 'dd-Mon-yy') from dual union all
       select  8, 'T200', to_date('07-May-2016', 'dd-Mon-yy') from dual union all
       select  9, 'T200', to_date('12-May-2016', 'dd-Mon-yy') from dual union all
       select 10, 'T200', to_date('20-May-2016', 'dd-Mon-yy') from dual
     ),
     prep ( txn_id, txn_type, txn_date, ct ) as (
       select txn_id, txn_type, txn_date, 
              case when txn_date < lag(txn_date) over (partition by txn_type
                           order by txn_date) + 10 then 0 else 1 end
       from   inputs
     )
select txn_id, txn_type, txn_date, 
       sum(ct) over (partition by txn_type order by txn_date) as number_
from prep;