数据库:Redshift
我有一张包含以下数据的表
**Term priority**
Search 4
Search 2
Input 5
Input 13
Search 10
Search 20
Search 22
我的目标是根据优先级(ASC)计算前一个词为search
且下一个词为Input
的值。
所以基本上我的查询应该将表格分类为格式
SlNo **Term priority**
1 Search 2
2 Search 4
3 Input 5
4 Search 10
5 Input 13
6 Search 20
7 Search 22
并将计数作为2,因为 - 在SlNo(2)Search
之后,Input
使得count = 1。
在SlNo(4)Search
之后,Input
使得count = 2
有没有办法在红移中实现这个目标?
答案 0 :(得分:0)
我在Oracle上创建了此查询,但我相信Redshift具有类似的功能:http://docs.aws.amazon.com/redshift/latest/dg/r_WF_LEAD.html
WITH input_data AS (
SELECT 'Search' AS term, 4 AS priority FROM dual
UNION ALL
SELECT 'Search' AS term, 2 AS priority FROM dual
UNION ALL
SELECT 'Input' AS term, 5 AS priority FROM dual
UNION ALL
SELECT 'Input' AS term, 13 AS priority FROM dual
UNION ALL
SELECT 'Search' AS term, 10 AS priority FROM dual
UNION ALL
SELECT 'Search' AS term, 20 AS priority FROM dual
UNION ALL
SELECT 'Search' AS term, 22 AS priority FROM dual
)
SELECT COUNT(*)
FROM (
SELECT input_data.*, LEAD(term, 1) OVER (ORDER BY priority) AS next_term
FROM input_data
) a
WHERE term = 'Search' AND next_term = 'Input'
;
输出:
+----------+
| COUNT(*) |
+----------+
| 2 |
+----------+