作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个名为 time
的 DATETIME
列。我如何才能选择属于过去 existing 12 个月内的所有行(不在从今天开始的去年)?并非每个月都可能有一行,几个月可能不止一行。
例如,从这个表 (ORDER BY time DESC
) 中,将选择 ID 为 2 到 17 的行。
id time
-- ----
17 2015-04-01
16 2015-04-01
15 2015-03-01
14 2015-02-01
13 2015-01-01
12 2014-12-01
11 2014-11-01
10 2014-10-01
9 2013-12-01
8 2013-11-01
7 2013-10-01
6 2013-09-01
5 2013-09-01
4 2013-09-01
3 2013-09-01
2 2013-08-01
1 2013-07-01
另一种表达方式:
将上表按月/年分组,我们得到:
2015-04
2015-03
2015-02
2015-01
2014-12
2014-11
2014-10
2013-12
2013-11
2013-10
2013-09
2013-08
2013-07
现在从该列表中取出最近的 12 个月,即除 2013 年 7 月以外的所有内容。
2015-04
2015-03
2015-02
2015-01
2014-12
2014-11
2014-10
2013-12
2013-11
2013-10
2013-09
2013-08
然后选择那些月份的所有内容。
我想我可以用多个查询或子查询来做到这一点,但还有其他方法吗?
最佳答案
如果您的时间字段只有月份精度,您可以使用非常简单的子选择来完成:
SELECT * FROM Table t1
WHERE time IN (
SELECT DISTINCT time FROM Table t2 ORDER BY time DESC LIMIT 12
)
如果您的时间戳是全精度的,您可以做同样的事情,但您需要进行一些日期操作以将日期舍入到月份以进行比较。
关于mysql - 从过去 12 个月中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29686282/
我是一名优秀的程序员,十分优秀!