mysql - 如何在mysql中使用给定日期计算前一个日期
问题描述
我已经使用窗口函数成功计算了每列的排名。
我正在尝试从上一个日期中减去排名;记录如下
我正在尝试获得这样的输出
CREATE TABLE `test_a` (
`date` date DEFAULT NULL,
`id` int DEFAULT NULL,
`x` decimal(39,4) DEFAULT NULL,
`x_RANK` bigint unsigned NOT NULL DEFAULT '0',
`y` decimal(39,4) DEFAULT NULL,
`y_rank` bigint unsigned NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*表格数据test_a
*/
insert into `test_a`(`date`,`id`,`x`,`x_RANK`,`y`,`y_rank``) values
('2020-03-30',107,0.6477,2,0.8087,1),
('2020-03-30',112,99,4,8.9137,4),
('2020-03-30',110,0.0983,1,3.3885,3),
('2020-03-30',102,2.4444,3,2.7200,2),
('2020-03-31',112,0.2292,2,8.8220,4),
('2020-03-31',107,0.7146,3,0.8755,1),
('2020-03-31',110,0.1680,1,3.7388,3),
('2020-03-31',102,2.7215,4,3.3320,2);
解决方案
SELECT `date`,
`id`,
`x`,
`x_RANK`,
`x_RANK` - COALESCE(LAG(`x_RANK`) OVER (PARTITION BY `id` ORDER BY `date`), 0) diff_rank_x,
`y`,
`y_rank`,
`y_RANK` - COALESCE(LAG(`y_RANK`) OVER (PARTITION BY `id` ORDER BY `date`), 0) diff_rank_y
FROM test_a
ORDER BY `id`, `date`;
您可以添加一个条件,从输出中删除“第一”行id
(例如,检查 noneLAG()
不为空)。
推荐阅读
- r - 从 broom::tidy 中提取具有 unnest 的单个元素
- database - 在 Bigtable 中对正向和反向查询问题进行建模
- c++ - 高效的位操作
- eclipse - 运行eclipse时输出消息
- javascript - 有没有办法将参数传递给模拟函数?
- sqlite - 有什么方法可以检查 SQLite3 数据库中表的存在和结构?
- javascript - Angular 应用程序导致 Uncaught SyntaxError: Unexpected identifier on import-from in JavaScript
- python - 尝试从列表中删除元素时出现 Python 值错误
- html - kotlin,如何在 html 中找到具有特殊 src 的 iframe 标签匹配
- objective-c - Firebase 多集合更新