问题描述
我有下一个挑战。
我们有在组数组中设置的定价范围,例如
[[1,1000],[1001,2000],[2003,5000]]
是否有可能接收 x 数组的第二个元素和 x+1 数组的第一个元素之间的差异。
在结果中,我需要类似的东西
[1,3]
或者我可以制作一个展平列表并在所有元素之间执行 arrayDifference 但随后我收到
[999,1,999,3,2997]
解决方法
试试这个查询:
SELECT
arrs,arrayMap(index -> arrs[index][1] - arrs[index - 1][2],range(2,length(arrs) + 1)) AS result
FROM
(
/* test data set */
SELECT [] AS arrs
UNION ALL
SELECT [[1,1000]] AS arrs
UNION ALL
SELECT [[1,1000],[1001,2000]] AS arrs
UNION ALL
SELECT [[1,2000],[2003,5000]] AS arrs
UNION ALL
SELECT [[1,5000],[5008,7890]] AS arrs
)
/*
┌─arrs───────────────────────────────────────────┬─result──┐
│ [] │ [] │
│ [[1,1000]] │ [] │
│ [[1,2000]] │ [1] │
│ [[1,5000]] │ [1,3] │
│ [[1,7890]] │ [1,3,8] │
└────────────────────────────────────────────────┴─────────┘
*/