sql - hive 中两条记录之间的差异

标签 sql hadoop hive count

我有一个包含 5 列的表,我需要找到前两条记录的计数列差异。 我能够根据某些条件获得前两项记录。例如,

我的 table 看起来像:

name address count current_date_time
john LA      102    2019-07-12 12:24:38
peter MAC    105    2019-07-12 12:24:40
john  NY      210   2019-07-12 12:24:02
john  WD      18    2019-07-12 12:24:12

选择查询以获取前两行:

SELECT count 
FROM table_name 
WHERE name="john" 
ORDER BY current_date_time DESC LIMIT 2

它返回如下:

count
102
18

但我需要 102 和 18 之间的差异。

如何编写子查询?

最佳答案

应用lead()窗口解析函数来确定下一行的列值。

SELECT count - ld as "Difference"
  FROM
 (
  SELECT count, lead(count,1,0) over (order by current_date_time desc ) as ld,
         current_date_time 
    FROM table_name 
   WHERE name="john" 
  ORDER BY current_date_time DESC LIMIT 2
 ) q
ORDER BY q.current_date_time DESC LIMIT 1

where for lead(count,1,0) 1 表示偏移量,即 1 行之后,0 表示默认值。

Demo in PostGres (hive 也有类似的语法)

关于sql - hive 中两条记录之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57001375/

相关文章:

sql - 在另一个表中插入行时如何自动增加一个表中的值

sql - 在 Postgres 中,如何在同一查询中进行 COUNT 和 WHERE,然后对结果进行数学运算?

hadoop - 错误ql.Driver(SessionState.java:printError(419))-失败:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapRedTask返回代码-101

java - 使用 java 使用语句类的单个 execute() 方法执行多个配置单元查询

mysql - ERROR 1241 (21000) 和 ERROR 1093 (HY000) 阻止执行 MYSQL 子查询

database - 了解Spark SQL的体系结构

java - hadoop 是如何工作的?客户端如何连接到hadoop

hadoop - hive不能在cloudera中创建角色和显示角色?

hadoop - Hortonwork 在 vmware 中安装后无法与浏览器连接

sql - 使用 INSERT INTO 和 'SELECT' 来提供一些值而不是其他值(Access 2010)