有一个名为DATETIME
的{{1}}列。如何选择最后现有 12个月内的所有行(不是从今天起的最后一年)?并非每个月都有一行,而且几个月可能有一行。
例如,在此表(time
)之外,将选择具有ID 2到17的行。
ORDER BY time DESC
另一种说法:
按照上表并按月/年分组,我们得到:
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
现在从这个列表中取出最近12个月,这是2013-07之外的所有内容。
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
从那几个月中选择所有内容。
我想我可以使用多个查询或子查询来执行此操作,但还有其他方法可以执行此操作吗?
答案 0 :(得分:0)
如果您的时间字段仅为月精度,则可以使用非常简单的子选择来完成:
SELECT * FROM Table t1
WHERE time IN (
SELECT DISTINCT time FROM Table t2 ORDER BY time DESC LIMIT 12
)
如果你的时间戳是完全精确的,你可以做同样的事情,但是你需要做一些日期操作来将日期四舍五入到月份进行比较。