我有一张桌子,如下:
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 `
谢谢您的帮助
答案 0 :(得分:1)
如果存在多个日期和实体,则可以使用以下代码。我只是用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
答案 1 :(得分:0)
SELECT IT1.date1, ITM.date2, IT1.table_name, IT2.count_table - ITM.count_table AS diff
FROM input_table IT1
cross JOIN (
SELECT *
FROM input_table IT2
WHERE IT1.DATE < it2.DATE and IT1.table_name = IT2.table_name)
) ITM
答案 2 :(得分:0)
在1个查询中两次使用同一张表,并为其提供别名。
SELECT a.date AS date1, b.date AS date2, a.table_name AS table_name, b.count_table - a.count_table AS diff
FROM yourTable a, yourTable b
WHERE a.date1 < b.date2
GROUP BY date1, date2, table_name