복붙노트

[SQL] 지난 7 일을 선택 MYSQL

SQL

지난 7 일을 선택 MYSQL

나는 여기에 몇 가지 게시물을 읽고 아무것도 특별한 것 같아하지만 난 여전히 마지막 날의 항목을 선택할 수 없습니다.

SELECT 
    p1.kArtikel, 
    p1.cName, 
    p1.cKurzBeschreibung, 
    p1.dLetzteAktualisierung, 
    p1.dErstellt, 
    p1.cSeo,
    p2.kartikelpict,
    p2.nNr,
    p2.cPfad

FROM 
    tartikel AS p1 WHERE DATE(dErstellt) > (NOW() - INTERVAL 7 DAY)

INNER JOIN 
    tartikelpict AS p2 
    ON (p1.kArtikel = p2.kArtikel) WHERE (p2.nNr = 1)

ORDER BY 
    p1.kArtikel DESC

LIMIT
    100;', $connection);

오늘과 지난 7 일 내 코드 출력하지 않습니다 아무것도 사이를 추가하는 경우.

해결법

  1. ==============================

    1.WHERE 절은 테이블 참조를 따라 작업을 가입해야하고, 잘못된다.

    WHERE 절은 테이블 참조를 따라 작업을 가입해야하고, 잘못된다.

    이 같은:

     FROM tartikel p1 
     JOIN tartikelpict p2 
       ON p1.kArtikel = p2.kArtikel 
      AND p2.nNr = 1
    WHERE p1.dErstellt >= DATE(NOW()) - INTERVAL 7 DAY
    ORDER BY p1.kArtikel DESC
    

    EDIT (세 플러스 년 이상)

    상기는 기본적으로 "내 쿼리에 WHERE 절을 추가하고 현재 쿼리가 내가 그것을 해결합니까 어떻게 오류를 반환하려고?"이 질문에 대한 답

    조건을 작성하는 방법에 대한 질문에 관해서는 그 검사 "지난 7 일"의 날짜 범위 ...

    그건 정말 사양, 테이블에있는 열의 데이터 유형이 무엇인지 (DATE 또는 DATETIME) 어떤 데이터를 사용할 수 ... 반환해야하는지 해석에 따라 달라집니다.

    요약하면 : 일반적인 접근 방식은 날짜 / 날짜 범위 및 그 범위의 "끝"를 "시작"는 식별하고, 쿼리 사람들을 참조하는 것입니다. 의는 "어제"에 대한 ... 쉽게 모든 행을 뭔가를 생각해 보자.

    있다면 우리의 열은 DATE 타입이다. 우리가 쿼리에 식을 통합하기 전에, 우리는 간단한 SELECT에서 테스트 할 수 있습니다

     SELECT DATE(NOW()) + INTERVAL -1 DAY 
    

    반환 결과는 우리가 기대하는 것입니다 확인합니다. 그리고 우리는이 같은 DATE 컬럼과 비교하는 WHERE 절에 같은 표현을 사용할 수 있습니다 :

     WHERE datecol = DATE(NOW()) + INTERVAL -1 DAY
    

    날짜 시간 또는 타임 스탬프 열을 위해, 우리는 범위 지정> =과 <부등식 비교를 사용하여

     WHERE datetimecol >= DATE(NOW()) + INTERVAL -1 DAY
       AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY
    

    "지난 7 일"동안 우리는 만약 지금이 시점에서 그 의미, 다시 칠일 ... 예를 알아야합니다 비교의 시간 성분을 포함 지난 7 * 24 시간, 1, ...

     WHERE datetimecol >= NOW() + INTERVAL -7 DAY
       AND datetimecol <  NOW() + INTERVAL  0 DAY
    

    , 오늘을 제외한 지난 7 완전한 일

     WHERE datetimecol >= DATE(NOW()) + INTERVAL -7 DAY
       AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY
    

    6 완전한 일 플러스 지금까지 오늘날 과거의 ...

     WHERE datetimecol >= DATE(NOW()) + INTERVAL -6 DAY
       AND datetimecol <  NOW()       + INTERVAL  0 DAY
    

    내가 SELECT 문에서 오른쪽의 표현식을 테스트하는 것이 좋습니다, 우리는 / 월되지는 우리가 주에 걸쳐 국경을 테스트 할 수 있도록 지금 무엇을 () 반환에 연결되고, 테스트를위한 NOW () 대신에 사용자 정의 변수를 사용할 수 있습니다 / 년 경계, 등등.

    SET @clock = '2017-11-17 11:47:47' ;
    
    SELECT DATE(@clock)
         , DATE(@clock) + INTERVAL -7 DAY 
         , @clock + INTERVAL -6 DAY 
    

    우리는 반환 값이 "시작"우리의 특정 사용 사례에 대한 "끝"에 대한 작업, 우리는 "지난 7 일"무슨 뜻인지, 우리가 WHERE 절에 범위의 비교에서 그 표현을 사용할 수 있다는 표현이 있으면.

    (일부 개발자는 + INTERVAL 발 일 /시 / 분 / 월 / 년 구문 대신에 DATE_ADD와 DATE_SUB 기능을 사용하는 것을 선호합니다.

    그리고 MySQL은, DATE, DATETIME과 TIMESTAMP 데이터 유형 ... DATE, LAST_DAY 작업을위한 몇 가지 편리한 기능을 제공합니다

    일부 개발자는 SQL 쿼리의 시작과 다른 코드의 끝, 및 공급 문자열 리터럴을 계산하는 것을 선호, 같은 데이터베이스에 제출 된 쿼리는 것을

      WHERE datetimecol >= '2017-11-10 00:00'
        AND datetimecol <  '2017-11-17 00:00'
    

    그리고 그 방법도 작동합니다. (내 취향은 명시 적으로 하나 CAST, CONVERT 아니면 그냥 + 간격 트릭, DATETIME에 그 문자열 리터럴을 캐스팅하는 것입니다 ...

      WHERE datetimecol >= '2017-11-10 00:00' + INTERVAL 0 SECOND
        AND datetimecol <  '2017-11-17 00:00' + INTERVAL 0 SECOND
    

    모든 위는 우리가 형식 예를 들어, 다양한에서 문자열로 저장, 적절한 DATE에서 DATETIME 및 / 또는 TIMESTAMP 데이터 유형을 "날짜"를 저장하고 있지 않습니다 가정 '일 / 월 / 년', 년 / 월 / 일, 또는 산발적으로 비 정식 형식의 줄리안 날짜, 또는 시대의 시작부터 초 단위로,이 답변이 더 이상 할 필요가있다.

  2. ==============================

    2.당신은 INNER를 사용하고 있기 때문에 그냥 같이, WHERE 절에 조건을 넣을 수 있습니다 가입 :

    당신은 INNER를 사용하고 있기 때문에 그냥 같이, WHERE 절에 조건을 넣을 수 있습니다 가입 :

    SELECT 
        p1.kArtikel, 
        p1.cName, 
        p1.cKurzBeschreibung, 
        p1.dLetzteAktualisierung, 
        p1.dErstellt, 
        p1.cSeo,
        p2.kartikelpict,
        p2.nNr,
        p2.cPfad  
    FROM 
        tartikel AS p1 INNER JOIN tartikelpict AS p2 
        ON p1.kArtikel = p2.kArtikel
    WHERE
      DATE(dErstellt) > (NOW() - INTERVAL 7 DAY)
      AND p2.nNr = 1
    ORDER BY 
      p1.kArtikel DESC
    LIMIT
        100;
    
  3. from https://stackoverflow.com/questions/24272335/mysql-select-last-7-days by cc-by-sa and MIT license