按最近日期的sql顺序

时间:2014-10-10 07:33:16

标签: php mysql sql

我的数据库中有这个表:

    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

但它无法正常工作。

有什么建议吗?

6 个答案:

答案 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

http://sqlfiddle.com/#!2/2be05/8

答案 3 :(得分:0)

我认为你的字段日期有一个类型字符串

所以你试试这个:

SELECT * FROM shop_stats 
ORDER BY SUBSTRING(date, 4, 4) desc,
substring(date, 1, 2) DESC LIMIT 12

显示Sql Fiddle

答案 4 :(得分:0)

您可以像这样使用STR_TO_DATE

SELECT
 *
FROM
 shop_stats 
order by
 STR_TO_DATE(date, '%m/%Y') DESC LIMIT 12

Demo

答案 5 :(得分:0)

从shop_stats中选择*,其中日期> =(NOW() - INTERVAL 12 MONTH)按日期排序