我的数据库中有这个表:
INSERT INTO `shop_stats` (`date`, `value`) VALUES
('09/2014', 326),
('08/2014', 1007),
('07/2014', 1108),
('06/2014', 1027),
('05/2014', 895),
('04/2014', 650),
('03/2014', 683),
('02/2014', 563),
('01/2014', 499),
('12/2013', 568),
('11/2013', 522),
('10/2013', 371),
('09/2013', 347),
('08/2013', 376),
('07/2013', 418),
('06/2013', 567),
('05/2013', 357);
我需要找到一种方法来展示过去的12个月。
我试过这个:
SELECT * FROM shop_stats ORDER BY date DESC LIMIT 12
但它不能正常工作。
有什么建议吗?
SELECT * FROM shop_stats WHERE date >= DATE_SUB(NOW(),INTERVAL 1 YEAR) LIMIT 12
您的"日期"存储为字符串,可能是以月份为单位。因此,下面的order by
应该能在中工作
order by right(date, 4), left(date, 2)
为了便于订购,您需要将年份放在月份之前。
如果你想要最后12个月,我建议:
where right(date, 4) * 12 + left(date, 2) >= year(now()) * 12 + month(now())
order by right(date, 4), left(date, 2)
where
语句将数据中的"日期"列和当前时间的日期转换为月份数。
您可以像这个一样简单地使用STR_TO_DATE
SELECT
*
FROM
shop_stats
order by
STR_TO_DATE(date, '%m/%Y') DESC LIMIT 12
演示
我想您的字段日期有一个类型字符串
所以你试试这个:
SELECT * FROM shop_stats
ORDER BY SUBSTRING(date, 4, 4) desc,
substring(date, 1, 2) DESC LIMIT 12
显示Sql Fiddle
您可以查看DATE_SUB
SELECT * FROM shop_stats where date >= DATE_SUB(now(), INTERVAL 12 MONTH) ORDER BY date
编辑:把字符串转换成日期怎么样;在sql中执行适当的日期操作?
SELECT DATE
,t1.value
FROM (
SELECT DATE
,STR_TO_DATE(CONCAT (
'01/'
,DATE
), '%d/%m/%Y') date_
,value
FROM shop_stats
) t1
WHERE t1.date_ >= DATE_SUB(now(), INTERVAL 12 MONTH)
ORDER BY t1.date_ DESC
http://sqlfiddle.com/#!2/2be05/8
从shop_stats中选择*,其中日期>=(NOW()-间隔12个月)按日期订购