source

MySQL에서만 지난 3개월 동안의 레코드 반환

nicesource 2023. 9. 16. 09:28
반응형

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

반응형