MySQL에서만 지난 3개월 동안의 레코드 반환
타임스탬프 필드가 있는 테이블이 있습니다.지난 3개월 동안의 데이터는 어떻게 얻나요?
특히, 3월은 제 현재의 달입니다, 예를 들어, 03/2012.저는 3월, 2월, 1월의 기록만 반납해야 합니다.
금일 3개월 전:
select * from table where timestamp >= now()-interval 3 month;
첫 달부터 시작:
select * from table where timestamp >= last_day(now()) + interval 1 day - interval 3 month;
이 달의 첫 날을 얻으려면 다음을 사용할 수 있습니다.
DATE_FORMAT(CURDATE(), '%Y-%m-01')
만약 현재 날짜가2013-03-13
, 돌아올 것입니다.2013-03-01
, 그리고 우리는 이 날짜로부터 2달만 빼서 얻을 수 있습니다.2013-01-01
. 쿼리는 다음과 같을 수 있습니다.
SELECT *
FROM yourtable
WHERE data >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH
이것이 오래된 질문이라는 것을 알고 있지만, 다른 사람들의 시간을 절약하고 (1) 현재 날짜와 (2) 이전 2개월의 날짜가 필요한 경우(데이터 통계를 표시할 때 일반적인) 위의 답변을 요약하면 다음과 같습니다.
WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))
SQL Server(Oracle, MySQL 등과 유사한 날짜 기능이 있음)를 사용하는 경우 날짜 추가 기능을 사용하여 현재 날짜에 간격을 추가하거나 뺄 수 있습니다.
3개월 전체를 원한다면 오늘부터 3개월을 뺄 수 있습니다.DATEADD(m,-3,getdate())
그러나 귀하가 명시한 대로 1월, 2월, 3월의 데이터만 원하는 것입니다.오늘 날짜를 기준으로 몇 가지 계산을 해야 합니다.dateadd(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate())) + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate()))))
그리고 결국에는 다음과 같은 질문을 받게 됩니다.
SELECT fields
FROM table
WHERE timestampfield > DATEADD(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate())) + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate()))))
--- edit --- erf, 방금 "mysql" 태그를 발견했습니다...MySQL 날짜 함수에 대한 더 많은 정보를 여기서 얻을 수 있습니다. https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
다른 가능성은 다음과 같습니다.
SELECT * WHERE your_date_column > LAST_DAY(CURRENT_DATE - INTERVAL 3 MONTH);
특정 날짜로부터 이전 3개월을 가져오려면 여기 코드를 사용합니다.
SELECT * FROM table WHERE date_column>= DATE_FORMAT(current_date(), '%Y-%m-01') - INTERVAL 3 MONTH and date_column< DATE_FORMAT(current_date(), '%Y-%m-01')
select metric,MONTH(Created) as month,YEAR(Created) as year
from table
where metric = value
AND ( ( YEAR(Created) = YEAR(NOW()) AND DATE(Created) >= DATE(NOW() - INTERVAL :month MONTH) )
OR ( Year(Created) = YEAR(NOW()) - 1 AND Month(Created) > MONTH(INTERVAL :month MONTH + NOW()) ) )
order by Created;
마지막 X개월 데이터를 표시하기 위한 Mysql 쿼리입니다.
참고 : X > 12인 경우에는 이 쿼리가 작동하지 않습니다.
WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01'))
OR (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH))
언급URL : https://stackoverflow.com/questions/15397015/returning-records-from-the-last-3-months-only-in-mysql
'source' 카테고리의 다른 글
바이트 배열을 이미지로 변환하는 방법? (0) | 2023.09.16 |
---|---|
CLI를 사용하여 Angular Project의 특정 버전을 만드는 방법? (0) | 2023.09.16 |
MySQL의 프로시저에서 @ 기호의 의미는 무엇입니까? (0) | 2023.09.16 |
Oracle DUP_VAL_ON_INDEX 예외를 무시하면 얼마나 나쁜가요? (0) | 2023.09.16 |
SQL에서 "AS" 키워드를 사용하지 않고 앨리어싱을 할 수 있는데 무슨 의미가 있습니까? (0) | 2023.09.16 |