【发布时间】:2022-01-24 11:42:51
【问题描述】:
我需要从 MySQL 表中提取数据,但如果之前的记录不到一年,则不允许包含记录。
鉴于以下记录,仅应包括记录 1、3 和 5(因为记录 2 是在记录后 1 个月创建的1,并且记录 4 是在记录 3 后 1 个月创建的):
1 2019-12-21
2 2020-01-21
3 2021-12-21
4 2022-01-21
5 2023-12-21
我想出了以下非功能性解决方案:
SELECT
*
FROM
table t
WHERE
(created_at > DATE_ADD(
(SELECT
created_at
FROM
table t2
WHERE
t2.created_at < t.created_at
ORDER BY
t2.created_at
DESC LIMIT 1), INTERVAL 1 YEAR)
但这只会返回第一条和最后一条记录,而不是第三条:
1 2019-12-21
5 2023-12-21
我知道原因:第三条记录被排除在外,因为记录 2 不到一年。但是不应该考虑记录 2,因为它不会自己列出。
我该如何解决这个问题?
【问题讨论】:
-
每年的最大记录 记录如果比上一年多。记录
-
created_at - LAG(created_at)在 CTE 中。 -
除此之外,关系数据库有行,而不是记录。