sql - 根据日期计算某行与其他行的最大值之差
问题描述
我有一张如下表:
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 写的。您可以通过更改 Temp 表语法在任何数据库中使用。
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 - 如何在 PyCharm 中突出显示 SQL
- javascript - 在交叉链接函数中保存嵌套级别
- docker - 我正在尝试配置traefik + docker,但是浏览器永远加载https url,你知道为什么吗?
- python - 不确定对 in list2=i[:4] Python 3++ 的理解
- javascript - setState 的顺序
- reactjs - Redux Offline 问题,将reducer 重新水化为null
- java - 问题:我想在运行 mvn eclipse:clean 时从我的 maven 项目中删除目录
- php - laravel 5.5 Auth::attempt login 在本地服务器上工作但在实时服务器上不工作
- arrays - 在对角线上垂直堆叠 5 个二维数组以构建一个完整的二维数组
- android - androidTest 文件夹和 apk 未为产品风味 android 仪器测试创建