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


96

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

테이블 값 :

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 쿼리는 동일합니다.


명확히하기 위해 7 일의 데이터가 아니라 일요일 이후의 데이터를 원하십니까? 그렇다면 오늘이 월요일이면 2 일간의 데이터 (일요일과 월요일)를 받게 될까요?
Brendan Long

일요일부터 토요일까지. 지난 7 일이 아님
coderex

실제로 이것을 SQL로 변환하고 싶지는 않지만 Wikipedia에서 요일을 결정하는 알고리즘을 찾은 다음이를 사용하여 얼마나 오래 돌아갈 지 결정할 수 있습니다 : en.wikipedia.org/wiki/ …
Brendan Long

@Brendan Long : 그는 SELECT id FROM tbl WHERE WEEK(date, 0) = WEEK(NOW(), 0) - 1몇 주 동안 사용할 수 있지만 그의 목표는 실제 달력 주가 아닌 것 같습니다 . 적어도 그는 ISO-8601과 같은 s / t를 언급하지 않았거나 올해의 차례를 고려할 것인지 여부는 언급하지 않았습니다.
Jürgen Thelen

나를 위해 대답은WHERE table.column >= DATE(NOW()) - INTERVAL 7 DAY
코너 거머리

답변:


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

1
안녕하세요, 월요일부터 일요일까지 시작하는 주를 정의한 지난 주를받는 방법
Xman Classical

5
@Graph 예, 위의 SQL 스크립트는 다음과 같습니다. SELECT id FROM tbl WHERE DATE> DATE_SUB (DATE (NOW ()), INTERVAL DAYOFWEEK (NOW ()) + 6 DAY) AND DATE <= DATE_SUB (DATE (NOW ( )), INTERVAL DAYOFWEEK (NOW ())-1 DAY)
Xman Classical

7
지난주 대신 지난 7 일을 반환합니다
kazuar

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

1
'2011-05-22'에서 실행하면 OP 질문이 해결되지 않습니다 id 15.
Cesar

2
이것이 최고의 답변입니다.
Jad Chahine

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

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


2
내가 알 수 있듯이 이것은 실제로 OP 질문에 올바르게 대답하는 유일한 대답입니다. 질문은 어떻게 지난주 에서 기록을 얻는가였습니다 . 여기에있는 많은 답변이 실제로 잘못되었습니다.
squarewav

주의 시작 요일도 지정하려면 YEARWEEK ()에 두 번째 인수를 제공하십시오. WHERE YEARWEEK(dateColumnFromTbl, 1) = YEARWEEK(CURDATE() - INTERVAL 1 WEEK, 1)
stamster

13

단순화 된 형식 :

지난주 데이터 :

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


한 해의 첫 주에는 어떻게 되나요?
Christian Goetze

1
질문은 지난주 데이터를 선택하는 것이 었습니다. 해당 연도의 첫 주에 지난주 데이터를 선택하려는 경우 쿼리는 전년도의 마지막 주를 반환합니다.
Anam

4
나는 YEAR (date) = YEAR (current_date)에 의해 혼란 스럽습니다. 전년도를 어떻게 선택할 수 있습니까?
Christian Goetze

8

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

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

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

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


5

아마도 가장 간단한 방법은 다음과 같습니다.

SELECT id
FROM table
WHERE date >= current_date - 7

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


3

제발 사람들이 ... OP와 같은 '지난주'가 요청했고 내가 찾고 있던 곳 (하지만 만족스러운 답변이 없음)은 지난 주입니다.

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

그래서:

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

또는 ISO 주 :

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

2

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

그때,

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • MySQL에서도 오늘과 관련된 일요일 날짜를 얻는 방법 일 수 있습니다. 수행하기에 너무 비싸지 않다면 틀림없이 더 깨끗한 솔루션이 될 것입니다.

2

한 줄에있을 수 있습니다.

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

2

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

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

1

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

예 :

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

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

1
귀하의 코드가 질문자의 질문에 답하는 이유를 설명하십시오.
Josh Burgess

0

나는 종종 빠른 "지난주"체크를 자주하는데, 다음은 나를 위해 잘 작동하는 경향이 있고 오늘을 포함합니다.

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 / * 지난 일요일 * /



0

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

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

0

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

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


0

다음은 MySQL에서 지난 주, 월, 연도 레코드를 가져 오는 방법입니다.

지난주

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE WEEK(InsertTime) = WEEK(NOW()) - 1;

지난 달

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE MONTH(InsertTime) = MONTH(NOW()) - 1;

작년

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE YEAR(InsertTime) = YEAR(NOW()) - 1;

0

지난 7 일 이내의 레코드를 검색하려는 경우 아래 스 니펫을 사용할 수 있습니다.

SELECT date FROM table_name WHERE DATE(date) >= CURDATE() - INTERVAL 7 DAY;

-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

-5

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

SELECT id    
FROM `Mytable`    
where MyDate BETWEEN "2011-05-15" AND "2011-05-21"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.