获取事件的下一个值

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

【讨论】:

以上是关于获取事件的下一个值的主要内容,如果未能解决你的问题,请参考以下文章

sql 获取序列的下一个值

获取 SQLite 数据库的下一个 AUTO_INCREMENT 值

如何使用 H2 嵌入式数据库获取序列中的下一个值?

jQuery中事件模块介绍

SQL Server 如何确定序列中的下一个值?

怎样用ThinkPHP在添加数据前获取自增长主键的下一个值