作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试获取任何 starts_at
列周年纪念日与范围周期匹配但与 ends_at
匹配的记录。
例如,我们有这个 subscriptions
表:
对于 2015-12-01
到 2016-02-01
的范围。
我需要带有 ID: 2
的那个,因为它的周年纪念日之一 (2016-01-01)
在范围内,但 ends_at
不是。
最佳答案
创建一个如下所示的年份查找表,并根据您的数据(比如 1980 年到 2050 年)插入行:
CREATE TABLE IF NOT EXISTS `year_lookup` (
`year_value` int,
PRIMARY KEY (`year_value`)
) DEFAULT CHARSET=utf8;
INSERT INTO `year_lookup` (`year_value`) VALUES
('2010'),
('2011'),
('2012'),
('2013'),
('2014'),
('2015'),
('2016'),
('2017');
然后,使用 yearlookup 加入订阅表以查找所有可能的周年纪念日。最后,根据 starts_at BETWEEN
和 end_at NOT BETWEEN
过滤记录,如下所示。
-- Anniversary
SELECT DISTINCT Final.id FROM (
SELECT s.id AS id, DATE_ADD(MAKEDATE(y.year_value, 1), INTERVAL DAYOFYEAR(starts_at)-1 DAY) AS starts_at, ends_at
FROM subscriptions AS s
INNER JOIN year_lookup AS y
ON y.year_value BETWEEN YEAR(starts_at) AND YEAR(ends_at)
) AS Final
WHERE
((starts_at BETWEEN '2015-12-01' AND '2016-02-01')
AND (ends_at NOT BETWEEN '2015-12-01' AND '2016-02-01')) ;
引用这个SQL Fiddle
关于MYSQL:与纪念日匹配的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73290477/
我是一名优秀的程序员,十分优秀!