__name__ == 'file1'
我正尝试根据以下逻辑使用 input 列创建 col1 和 col2 列:
input col1 col2
---------------------------------------------------------
12/8/2018 1:45 12/8/2018 1:45 12/8/2018 11:03
12/8/2018 11:03 12/8/2018 11:03 12/11/2018 13:26
12/11/2018 13:26 12/11/2018 13:26 12/13/2018 17:21
12/13/2018 17:21 12/13/2018 17:21 12/23/2018 17:21
12/23/2018 17:21 12/23/2018 17:21 12/24/2018 16:17
12/24/2018 16:17 12/24/2018 16:17 12/24/2018 16:17
)行。 我正在尝试在SQL查询中实现逻辑,以根据上述逻辑获取 col1 和 col2 列。有人可以帮我吗?
答案 0 :(得分:3)
为此创建了LEAD分析功能:
SELECT
input,
input as col1,
COALESCE(LEAD(input) OVER(ORDER BY input), input) as col2
FROM table
Lead从“ next”行返回给定值,“ next”的含义是从ORDER BY子句推导出来的。如果您想要的值是前面2、3,N行
,则Lead可以另外使用数字参数我已经假设您的排序是按照input
的日期的升序进行的,但是如果您希望通过其他方式定义行的顺序,请将其放在“ order by”内部“结束”
Lead将在最后一行返回null,因此我合并输入值以满足您的要求。 Lead确实具有一个可选参数,如果在偏移处没有行,则从当前行使用什么值,我只是倾向于不使用它,因为我发现它的可读性较差。 LEAD(input, 3, othercol)
的意思是“给输入前3行的值,如果没有行则给出othercol。othercol可以是该行中的任何列,甚至是input
答案 1 :(得分:0)
我认为您可以使用窗口功能来完成您想做的事情:
select input, input as col1,
lead(input, 1, input) over (order by input) as col2
from t;
答案 2 :(得分:0)
您的点编号2 尚不清楚,我在这里假设您要在输入 的值中添加1天来创建col2
的东西。
这是一种实现方法:
SELECT input, input AS col1, (
CASE
WHEN id != (SELECT MAX(id) FROM <table_name>) /** last item assumed to have the highest id */
THEN
input + INTERVAL '1 day'
ELSE
input
END
) AS col2
FROM <table_name>;