sql - 根据日期计算某行最大值与其他行的差值

标签 sql hadoop hive hiveql

我有一个表格如下:

date          table_name   count_table
2018-07-19    A            50  
2018-07-19    B            40
2018-07-18    A            25
2018-07-18    B            30
2018-07-17    A            10
2018-07-17    B            5

我想计算每个日期之间的计数差异。 结果表如下:

date1        date2        table_name    diff
2018-07-17   2018-07-18   A             15
2018-07-18   2018-07-19   A             25
2018-07-17   2018-07-18   B             25
2018-07-18   2018-07-19   B             10 `

谢谢你的帮助

最佳答案

如果存在多个日期和实体,那么您可以使用以下代码。我只是用 MariaDb 写的。您可以通过更改临时表语法在任何数据库中使用。

 CREATE TABLE test(dates date, table_name varchar(10), count_table INT);
 INSERT INTO test(dates, table_name, count_table) 
 VALUES('2018-07-19','A', 50),
 ('2018-07-19', 'B', 40),
 ('2018-07-18', 'A', 25),
 ('2018-07-18', 'B', 30),
 ('2018-07-17', 'A', 10),
 ('2018-07-17', 'B', 5);

 CREATE TEMPORARY TABLE test2(dates date, table_name varchar(10), count_table INT, Ranks INT);

INSERT INTO test2
select *, ROW_NUMBER() OVER(partition BY table_name order by dates) as Ranks
from test;

select t1.dates as date1, t2.dates as date2, t1.table_name, t2.count_table - t1.count_table
from test2 t1
INNER JOIN test2 t2 ON t1.table_name = t2.table_name and t1.ranks = t2.ranks - 1
ORDER BY table_name, t1.dates

关于sql - 根据日期计算某行最大值与其他行的差值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51418264/

相关文章:

sql - 连接 3 个表只得到两行

hadoop - 启动 hive 时出错

hadoop - 自定义对象作为 Mapper 输出的值

hadoop - hadoop跨数据库查找表

hadoop - 如何在 hive 中执行更新?

mysql - 查找表格中的所有起始字母

sql - 临时表的生命周期

mysql - 如何按计算的平均值进行分组

hadoop - 在 YARN 中,容器大小是如何确定的?

sql-server - 为什么 Hive 不支持存储过程?