获取事件的下一个值
Posted
技术标签:
【中文标题】获取事件的下一个值【英文标题】:Get Next Value of an occurrence 【发布时间】:2016-09-05 05:26:16 【问题描述】:数据库:红移
我有一个包含以下数据的表格
**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
使得计数 = 1。
在 SlNo(4) Search
之后有 Input
这使得 count = 2
有没有办法在 redshift 中实现这一点?
【问题讨论】:
您需要排序表还是只需要计数?如果您需要两个表和计数,那么可以通过两个查询来完成还是希望通过一个查询来完成?? @sagarchapagain 我只需要计数 是否可以写存储过程或者你需要一个普通的sql查询?? 【参考方案1】:我在 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 |
+----------+
【讨论】:
以上是关于获取事件的下一个值的主要内容,如果未能解决你的问题,请参考以下文章