如何编写 hql/sql 来解决以下问题

Posted

技术标签:

【中文标题】如何编写 hql/sql 来解决以下问题【英文标题】:How to write hql/sql to solve below problem 【发布时间】:2019-04-09 16:12:07 【问题描述】:

我正在尝试编写以下代码来实现输出?

输入:

+----------------------+
|         dttm         |
+----------------------+
| 2014-11-18 16:23:01  |
| 2014-11-18 16:23:02  |
| 2014-11-18 16:26:14  |
| 2014-11-18 16:26:15  |
| 2014-11-18 16:26:16  |
| 2014-11-18 17:43:02  |
| 2014-11-18 17:43:03  |
| 2018-12-17 23:59:59  |
| 2018-12-18 00:00:00  |
| 2019-01-17 00:00:00  |
| 2019-01-17 00:00:01  |
+----------------------+

输出:

+----------------------+
|         dttm         |
+----------------------+
| 2014-11-18 16:23:01  |
| 2014-11-18 16:23:02  |
| 2014-11-18 16:26:14  |
| 2014-11-18 16:26:15  |
| 2014-11-18 16:26:16  |
| 2014-11-18 16:26:16  |
| 2014-11-18 17:43:02  |
| 2014-11-18 17:43:03  |
| 2018-12-17 23:59:59  |
| 2018-12-18 00:00:00  |
| 2019-01-17 00:00:00  |
| 2019-01-17 00:00:01  |
+----------------------+

实现逻辑:行项目 1 和 2 应该相差 1 秒,3 和 4 应该相差 1 秒,依此类推。

如果不是这样,请复制该行项目。

【问题讨论】:

你能不能也展示一些负面的场景? 我没听懂。你能告诉我你在找什么信息吗? 请忽略以上评论。我明白了。 【参考方案1】:

试试这个



select a.dttm from (
select   t1.rn, t1.dttm, case when  (unix_timestamp(t2.dttm) - unix_timestamp(t1.dttm) )  = 1 then '1' when  (unix_timestamp(t2.dttm) - unix_timestamp(t1.dttm)) is null then '1' else '1,2' end as split_rec
from (select dttm, row_number () over () as rn from tmstmp) t1 left outer join
(select dttm, row_number () over () as rn from tmstmp) t2
on t1.rn = t2.rn-1 and pmod(t2.rn,2) =0) a
lateral view explode(split(a.split_rec , ',')) temp as td1
;



Output is :

+-----------+------------------------+--+
| temp.td1  |         a.dttm         |
+-----------+------------------------+--+
| 1         | 2014-11-18 16:23:01.0  |
| 1         | 2014-11-18 16:23:02.0  |
| 1         | 2019-01-17 00:00:00.0  |
| 1         | 2019-01-17 00:00:01.0  |
| 1         | 2014-11-18 16:26:14.0  |
| 1         | 2014-11-18 16:26:15.0  |
| 1         | 2014-11-18 16:26:16.0  |
| 2         | 2014-11-18 16:26:16.0  |
| 1         | 2014-11-18 16:26:16.0  |
| 1         | 2014-11-18 17:43:02.0  |
| 1         | 2014-11-18 17:43:03.0  |
| 1         | 2018-12-17 23:59:59.0  |
| 1         | 2018-12-18 00:00:00.0  |
+-----------+------------------------+--+


【讨论】:

感谢您的回复。但我可以看到“2014-11-18 16:26:16”出现三次。你能再检查一下吗? 可能是因为输入数据。我错误地插入了两次。请尝试实际数据并进行验证。谢谢

以上是关于如何编写 hql/sql 来解决以下问题的主要内容,如果未能解决你的问题,请参考以下文章

如何编写 R 函数来查找数据框中的特定条件

已解决 - 如何在Knime Unpivoting节点中编写regex来选择列。

如何编写测试用例来覆盖承诺链中所有嵌套的“then”回调

如何编写正则表达式模式来获取匹配的字符串?

来自特定帖子的前 5 条评论。如何编写我的 SQL

如何编写包含语句来匹配类的成员?