mysql - 比较MySQL中表中同一列的属性
问题描述
我有一个包含以下列的表格:TitleID (VARCHAR),Version (BIGINT), CreatedAt (DATETIME)
通常不同版本的标题是按顺序排列的,但是最近我开始获得它们不按顺序排列的条目,即
TitleID Version CreatedAt
ABCDE 2 2018-06-10 20:28:37
ABCDE 1 2018-06-13 10:00:12
ABCDE 3 2018-06-13 20:00:00
XYZ 2 2018-06-13 20:00:00
XYZ 1 2018-06-13 20:00:01
正如您在 Title ABCDE 中看到的那样,版本 2 出现在版本 1 之前,版本 3 出现在预期的版本 2 之后。对于 Title XYZ,版本 2 也位于版本 1 之前。我正在尝试编写一个查询,让我知道哪些标题及其版本在过去 2 周内出现故障。为此,我尝试以这种方式编写查询:
SELECT * FROM REVIEWS T1 WHERE T1.TitleID IN
(SELECT TitleID FROM REVIEWS T2 WHERE CreatedAt > '2018-05-30'
AND T1.CreatedAt < T2.CreatedAt AND T1.Version > T2.Version)
AND CreatedAt > '2018-05-30';
解决方案
将表连接到自身,省略版本相等的行,然后过滤 Version/CreatedAt 不一致。
select
t1.TitleID,
t1.Version,
t1.CreatedAt,
t2.Version,
t2.CreatedAt
from reviews t1
join reviews t2
on t1.TitleID = t2.TitleID and t1.Version != t2.Version
where
(t1.Version > t2.Version and t1.CreatedAt < t2.CreatedAt)
这是小提琴
推荐阅读
- algorithm - $\pi$ 的蒙特卡洛估计
- ios - SwiftUI 地图扩展添加 MKPolylineRenderer
- iis - ColdFusion 仅提供默认文档
- json - JSON::ParserError (784: '{) 处的意外标记
- html - 从 python 应用程序文件将图像发送到 HTML 文件
- html - 转换不适用于嵌入式 SVG Chrome
- javascript - TypeError:从类重构为函数组件后,Object(...) 不是函数
- r - R中for循环和ifelse的组合
- google-drive-api - 出现错误:已超出未经验证使用的每日限制。继续使用需要注册
- node.js - 使用 PayPal 从 nodejs 应用程序汇款