我的数据库中有这个表:
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
但它无法正常工作。
有什么建议吗?
答案 0 :(得分:1)
SELECT * FROM shop_stats WHERE date >= DATE_SUB(NOW(),INTERVAL 1 YEAR) LIMIT 12
答案 1 :(得分:1)
你的"约会"存储为字符串,大概是以月为先。因此,以下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)
对于" date" where
语句将日期转换为若干个月。数据中的列和当前时间。
答案 2 :(得分:0)
您可以查看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
答案 3 :(得分:0)
我认为你的字段日期有一个类型字符串
所以你试试这个:
SELECT * FROM shop_stats
ORDER BY SUBSTRING(date, 4, 4) desc,
substring(date, 1, 2) DESC LIMIT 12
答案 4 :(得分:0)
答案 5 :(得分:0)
从shop_stats中选择*,其中日期> =(NOW() - INTERVAL 12 MONTH)按日期排序