从过去的现有12个月中选择行

时间:2015-04-16 21:26:02

标签: mysql

有一个名为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

从那几个月中选择所有内容。

我想我可以使用多个查询或子查询来执行此操作,但还有其他方法可以执行此操作吗?

1 个答案:

答案 0 :(得分:0)

如果您的时间字段仅为月精度,则可以使用非常简单的子选择来完成:

SELECT * FROM Table t1
WHERE time IN (
    SELECT DISTINCT time FROM Table t2 ORDER BY time DESC LIMIT 12
)

如果你的时间戳是完全精确的,你可以做同样的事情,但是你需要做一些日期操作来将日期四舍五入到月份进行比较。