2013-02-01 3 views
3

데이터베이스에서 지난 6 개월간의 값을 가져와야합니다. 여기 내 Fiddle입니다. 값을 동적으로 가져와야합니다. 지금 2 월. 그래서 저는 데이터베이스에서 8 월에서 1 월까지의 가치가 필요합니다. 3 월이면 값이 자동으로 10 월에서 2 월으로 변경됩니다. 그래서 지난 6 개월간의 가치를 알아야합니다.mysql에서 지난 6 개월 동안의 값을 얻으십시오

내 코드가 있습니다.

CREATE TABLE IF NOT EXISTS `ratepersqft` (
    `price_id` int(11) NOT NULL auto_increment, 
    `project_id` int(11) default NULL, 
    `date` varchar(255) default NULL, 
    `rate_per_sqft` double default NULL, 
    `common_location` varchar(255) default NULL, 
    PRIMARY KEY (`price_id`) 
); 

INSERT INTO `ratepersqft` (`price_id`, `project_id`, `date`, `rate_per_sqft`, `common_location`) VALUES 
    (1, 1, '2012-07-01 ', 2800, 'ECR'), 
    (2, 2, '2012-07-02 ', 1550, 'ECR'), 
    (3, 3, '2012-07-03 ', 1850, 'ECR'), 
    (4, 4, '2012-07-04 ', 4425, 'ECR'), 
    (5, 5, '2012-07-05 ', 2300, 'ECR'), 
    (6, 1, '2012-08-01 ', 2900, 'ECR'), 
    (7, 2, '2012-08-02 ', 1650, 'ECR'), 
    (8, 3, '2012-08-03 ', 1950, 'ECR'), 
    (9, 4, '2012-08-04 ', 4525, 'ECR'), 
    (10, 5, '2012-08-05 ', 2200, 'ECR'), 
    (11, 1, '2012-09-01 ', 3000, 'ECR'), 
    (12, 2, '2012-09-02 ', 1450, 'ECR'), 
    (13, 3, '2012-09-03 ', 2050, 'ECR'), 
    (14, 4, '2012-09-04 ', 4625, 'ECR'), 
    (15, 5, '2012-09-05 ', 2100, 'ECR'), 
    (16, 1, '2012-10-01 ', 3100, 'ECR'), 
    (17, 2, '2012-10-02 ', 2150, 'ECR'), 
    (18, 3, '2012-10-03 ', 1850, 'ECR'), 
    (19, 4, '2012-10-04 ', 4725, 'ECR'), 
    (20, 5, '2012-10-05 ', 1900, 'ECR'), 
    (21, 1, '2012-11-01 ', 3200, 'ECR'), 
    (22, 2, '2012-11-02 ', 2250, 'ECR'), 
    (23, 3, '2012-11-03 ', 1850, 'ECR'), 
    (24, 4, '2012-11-04 ', 4825, 'ECR'), 
    (25, 5, '2012-11-05 ', 2300, 'ECR'), 
    (26, 1, '2012-12-01 ', 3300, 'ECR'), 
    (27, 2, '2012-12-02 ', 2350, 'ECR'), 
    (28, 3, '2012-12-03 ', 1850, 'ECR'), 
    (29, 4, '2012-12-04 ', 4925, 'ECR'), 
    (30, 5, '2012-12-05 ', 2400, 'ECR'), 
    (31, 1, '2013-01-01 ', 3400, 'ECR'), 
    (32, 2, '2013-01-02 ', 2000, 'ECR'), 
    (33, 3, '2013-01-03 ', 2450, 'ECR'), 
    (34, 4, '2013-01-04 ', 5025, 'ECR'), 
    (35, 5, '2013-01-05 ', 2500, 'ECR'), 
    (36, 1, '2013-02-01 ', 3500, 'ECR'), 
    (37, 2, '2013-02-02 ', 2100, 'ECR'), 
    (38, 3, '2013-02-03 ', 2550, 'ECR'), 
    (39, 4, '2013-02-04 ', 5125, 'ECR'), 
    (40, 5, '2013-02-05 ', 2600, 'ECR'), 
    (41, 1, '2012-06-01 ', 1800, 'ECR'), 
    (42, 2, '2012-06-02 ', 1150, 'ECR'), 
    (43, 3, '2012-06-03 ', 1350, 'ECR'), 
    (44, 4, '2012-06-04 ', 3425, 'ECR'), 
    (45, 5, '2012-06-05 ', 2100, 'ECR'); 

이 쿼리를 시도하고 있는데 데이터베이스의 모든 값을 제공합니다.

SELECT * 
    FROM ratepersqft 
WHERE MONTH(date) < DATE_SUB(CURDATE(), INTERVAL 6 MONTH) 

희망 사항은 분명합니다. 미리 감사드립니다 !!!

+0

당신은 MySQL을로 태그하고 SQL 서버 ... 정확히 어떤 하나? :-) – bonCodigo

+0

이것은 mysql입니다. 당신은 바이올린 –

+0

아를 참조 할 수 있습니다, 당신은 미래의 기록을 제외해야한다고 지정하지 않았습니다. 이 요구 사항을 추가하려면 답변을 변경하고 있습니다. – mvp

답변

14

MYSQL의 경우 : 당신은 date_add 사용할 수 있습니다 :

SELECT * FROM ratepersqft 
WHERE date < Now() and date > DATE_ADD(Now(), INTERVAL- 6 MONTH); 

을 SQL 서버 :, dateadd의 경우 :

SELECT * FROM ratepersqft 
WHERE date < Now() and date > DATEADD(Month, -6, Now()); 

http://www.sqlfiddle.com/#!2/1f8029/48

**를 주어진 역 따옴표로 날짜 열 이름을 포장하십시오 예약어입니다. **

MYSQL 업데이트 :

SQLFIDDLE DEMO

SELECT * 
FROM ratepersqft 
WHERE date_format(date,'%Y-%m') < 
        date_format(now(),'%Y-%m') 
and date_format(date,'%Y-%m') >= 
        date_format(now() - interval 6 month,'%Y-%m') 
order by date desc; 
+0

Now()는 SQL Server에 존재하지 않습니다. SQL Server의 경우 getdate() [http://forums.asp.net/t/1431963.aspx?+NOW+is+not+a+recognized+built+in+function+name+](http://forums. asp.net/t/1431963.aspx?+NOW+is+not+a+recognized+built+in+function+name+) – user1

4

이 모든 날짜 비교를 위해 달의 시작 부분으로 반올림 생각하며, 오늘 날짜에서 지난 6 개월을 얻을 것이다 :

SELECT * 
FROM ratepersqft 
WHERE date >= DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 6 MONTH) 
    AND date < DATE_FORMAT(CURDATE(), '%Y-%m-01') 

의무적 인 SQLFiddle.

+0

7 개월 가치를 얻고 있습니다. –

+0

가장 초기 값은'2012-08-02'입니다. 제가 말할 수있는 한 6 개월 전이었습니다.정확한 날짜가 중요하다면'> '대신'> ='를 사용하는 것이 좋습니다. 또는 달의 1 일에 값을 얻어야합니까? – mvp

+0

헤드 업과 'DATE_SUB' 메이트에 +1 : – bonCodigo

1

SQLFiddle

당신이 전체 개월을 원하는 경우에만

SELECT * 
FROM ratepersqft 
WHERE date between date_format(DATE_SUB(CURDATE(), INTERVAL 6 MONTH), '%Y-%m-01') 
      and date_sub(date_format(CURDATE(), '%Y-%m-01'), interval 1 day); 
+0

지난 5 개월 값만 가져옵니다. 내가 맞습니까? –

+0

@VigneshGopalakrishnan 업데이트 된 답변을 참조하십시오. –

-1
SELECT 
YEAR(DATE) AS YEAR, 
SUM(MONTH(DATE) = 1) AS JAN , 
SUM(MONTH(DATE) = 2) AS FEB , 
SUM(MONTH(DATE) = 3) AS MAR , 
SUM(MONTH(DATE) = 4) AS APR, 
SUM(MONTH(DATE) = 5) AS MAY , 
SUM(MONTH(DATE) = 6) AS JUNE , 
SUM(MONTH(DATE) = 7) AS JULY , 
SUM(MONTH(DATE) = 8) AS AUG, 
SUM(MONTH(DATE) = 9) AS SEP , 
SUM(MONTH(DATE) = 10) AS OCTOBER , 
SUM(MONTH(DATE) = 11) AS NOV , 
SUM(MONTH(DATE) = 12) AS DECE 
FROM ratepersqft 
WHERE DATE >= NOW() - INTERVAL 6 MONTH 
GROUP BY 1; 
관련 문제