IT

지난주 데이터를 선택하는 MySQL 쿼리?

lottoking 2020. 9. 4. 07:42
반응형

지난주 데이터를 선택하는 MySQL 쿼리?


안녕하세요, 날짜 필드와 기타 정보가있는 테이블이 있습니다. 지난주 (일요일부터 주 시작)의 모든 항목을 선택하고 싶습니다.

테이블 값 :

id  date
2   2011-05-14 09:17:25
5   2011-05-16 09:17:25
6   2011-05-17 09:17:25
8   2011-05-20 09:17:25
15  2011-05-22 09:17:25

지난주에있는 모든 ID를 선택하고 싶습니다. 예상되는 출력은 5, 6, 8입니다 (ID 2는 지난 주가 아니고 ID 15는 이번 주에 있음).

작성 방법과 SQL 쿼리는 동일합니다.


SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY

select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();

SELECT id FROM table1
WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)

저는 특별히 YEARWEEK 함수를 사용하여 이전 전체 주 (오늘 전 7 일이 아닌)로 돌아갑니다. YEARWEEK는 또한 허용주의 시작을 설정하거나 인수를 연도의 첫 번째 / 마지막 주를 처리하는 방법을 결정하는 두 번째를 설정합니다. YEARWEEK를 사용하면 단일 변수에서 뒤로 / 앞으로있는 다른 주 수를 많은 것으로 이전 / 여기에 동일한 주 번호를 포함하지 않고 여기에 대부분의 대답보다 훨씬 짧습니다.


단순화 된 형식 :

지난주 데이터 :

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 1 AND YEAR( date) = YEAR( current_date );

2 주 전 데이터 :

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 2 AND YEAR( date) = YEAR( current_date );

SQL 바이올린

http://sqlfiddle.com/#!8/6fa6e/2


PHP로 계산 한 다음 쿼리에 추가 할 수 있습니다.

$date = date('Y-m-d H:i:s',time()-(7*86400)); // 7 days ago

$sql = "SELECT * FROM table WHERE date <='$date' ";

이제이 일주일 전의 날짜를 제공합니다


아마도 가장 간단한 방법은 다음과 가변적입니다.

SELECT id
FROM table
WHERE date >= current_date - 7

8 일 동안 (예 : 월요일-월요일)


미들웨어 (php, python 등) *에서 오늘과 관련된 어느 날이 일요일인지 계산해야합니다.

그때,

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • MySQL 날짜와 관련된 일요일 날짜를 얻을 수 있습니다. 수행 할 너무 비싸지 않다면 분명히 더 많은 솔루션이 될 것입니다

한 줄에있을 수 있습니다.

SELECT * FROM table WHERE Date BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW()

간단한 방법은 이것이 될 수 있습니다. 이것은 내 코드의 실제 예제이며 완벽하게 작동합니다.

where("actions.created_at >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)")

제발 사람들이 ... OP와 같은 '지난주'가 요청하고 내가 예약 한 곳에서 (하지만 만족스러운 지난 요청이 없음)은 주입니다.

오늘이 화요일 인 경우, 지난 주 월요일 주일 전 일요일까지 일주일 전에 .

그래서:

WHERE
    WEEK(yourdate) = WEEK(NOW()) - 1

또는 ISO 주 :

WHERE
    WEEK(yourdate, 3) = WEEK(NOW(), 3) - 1

위의 쿼리는 작동하지 않습니다. where이후에 CAST열 값을 찾을 수 없으면 작동하지 않습니다. cast열 값을 해야 합니다.

예 :

SELECT.....
WHERE CAST( yourDateColumn AS DATE ) > DATEADD( DAY, -7, CAST( GETDATE() AS DATE )

SELECT id  FROM tb1
WHERE 
YEARWEEK (date) = YEARWEEK( current_date -interval 1 week ) 

나는 종종 빠른 "지난 주"확인을 수행하며 다음은 나를 위해 잘 작동하는 경향이 있으며 오늘을 포함합니다.

DECLARE @StartDate DATETIME 
DECLARE @EndDate DATETIME 

SET @StartDate = Getdate() - 7 /* Seven Days Earlier */
SET @EndDate = Getdate() /* Now */

SELECT id 
FROM   mytable 
WHERE  date BETWEEN @StartDate AND @Enddate 

오늘을 포함하지 않으려면 @EndDate에서 추가 하루를 빼면됩니다. 오늘이 두 변수를 선택하면

@StartDate 2015-11-16 16 : 34 : 05.347 / * 지난 월요일 * /

@EndDate 2015-11-23 16 : 34 : 05.347 / * 이번 월요일 * /

내가 일요일에서 일요일까지 원한다면 다음을 가질 것입니다.

SET @StartDate = Getdate() - 8 /* Eight Days Earlier */
SET @EndDate = Getdate() - 1  /* Yesterday */

@StartDate 2015-11-15 16 : 34 : 05.347 / * 이전 일요일 * /

@EndDate 2015-11-22 16 : 34 : 05.347 / * 지난 일요일 * /


WHERE yourDateColumn > DATEADD(DAY, -7, GETDATE()) ;

esay 방식으로 사용할 수도 있습니다.

SELECT *
FROM   inventory
WHERE  YEARWEEK(`modify`, 1) = YEARWEEK(CURDATE(), 1)

i 일요일부터 시작하는 주에 사용 :

SELECT id FROM tbl
WHERE
date >= curdate() - INTERVAL DAYOFWEEK(curdate())+5 DAY  
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-2 DAY

예를 들어 지난달, 작년, 지난 15 일, 지난 3 개월

지난 주 레코드 가져 오기

아래 MySQL 쿼리를 사용하여 mysql 데이터베이스 테이블에서 지난주 레코드를 가져옵니다.

SELECT name, created_at 
FROM employees
WHERE
YEARWEEK(`created_at`, 1) = YEARWEEK( CURDATE() - INTERVAL 1 WEEK, 1)

이 시도:

Declare @Daytype varchar(15),
        @StartDate datetime,
        @EndDate datetime
set @Daytype = datename(dw, getdate())

if @Daytype= 'Monday' 
    begin
        set @StartDate = getdate()-7 
        set @EndDate = getdate()-1

    end


else if @Daytype = 'Tuesday'

    begin
        set @StartDate = getdate()-8 
        set @EndDate = getdate()-2

    end
Else if @Daytype = 'Wednesday'
    begin
        set @StartDate = getdate()-9
        set @EndDate = getdate()-3
    end
Else if @Daytype = 'Thursday'
    begin
        set @StartDate = getdate()-10 
        set @EndDate = getdate()-4
    end

Else if @Daytype = 'Friday'

    begin
        set @StartDate = getdate()-11
        set @EndDate = getdate()-5

    end

Else if @Daytype = 'Saturday'

    begin
        set @StartDate = getdate()-12
        set @EndDate = getdate()-6

    end

Else if @Daytype = 'Sunday'

    begin
        set @StartDate = getdate()-13
        set @EndDate = getdate()-7

    end

 select @StartDate,@EndDate

이미 날짜를 알고 있다면 다음과 같이 간단히 사이에 사용할 수 있습니다.

SELECT id    
FROM `Mytable`    
where MyDate BETWEEN "2011-05-15" AND "2011-05-21"

참고 URL : https://stackoverflow.com/questions/6089960/mysql-query-to-select-data-from-last-week

반응형