获取事件的下一个值

时间:2016-09-05 05:26:16

标签: sql database postgresql amazon-web-services amazon-redshift

数据库: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

有没有办法在红移中实现这个目标?

1 个答案:

答案 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        |
+----------+