programing

MySQL Select last 7days

projobs 2022. 10. 31. 23:08
반응형

MySQL Select last 7days

여기서 몇 개의 투고를 읽었는데, 특별한 것은 아닌 것 같습니다만, 최근 며칠간의 엔트리를 선택할 수 없습니다.

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일 사이에 를 추가하면 코드는 아무것도 출력하지 않습니다.

WHERE구가 잘못되었으므로 테이블 참조 및 JOIN 조작을 따라야 합니다.

다음과 같은 경우:

 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

편집(3년 이상 후)

위의 내용은 기본적으로 "WHERE 절을 쿼리에 추가하려고 했는데 쿼리가 오류를 반환하고 있습니다. 어떻게 수정해야 합니까?"라는 질문에 대한 답변입니다.

'최근 7일'의 날짜 범위를 확인하는 조건 작성에 대한 질문입니다만...

이는 사양 해석, 테이블 내 열의 데이터 유형(DATE 또는 DATETIME) 및 사용 가능한 데이터에 따라 달라집니다.반환해야 할 것.

요약: 일반적인 접근법은 날짜/시간 범위의 "시작"과 해당 범위의 "끝"을 식별하고 쿼리에서 참조하는 것입니다.좀 더 쉬운 걸 생각해 봅시다모든 행이 "syslog"로 표시됩니다.

열이 DATE 유형인 경우.쿼리에 식을 포함하기 전에 간단한 SELECT로 테스트할 수 있습니다.

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

반환된 결과가 우리가 예상한 것임을 확인합니다.그런 다음 WHERE 절에서 동일한 식을 사용하여 다음과 같은 DATE 열과 비교할 수 있습니다.

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

에는 DATETIME TIMESTAMP 를 사용할 수 .>= ★★★★★★★★★★★★★★★★★」<를 지정하기 위한 부등식

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

'최근 7일'은 이 시점부터 7일 전을 의미하는지 여부를 알아야 합니다.예를 들어 지난 7*24시간 동안 비교한 시간 구성요소를 포함하여 다음과 같습니다.

 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() 대신 사용자 정의 변수를 사용하여 NOW()가 반환하는 값에 얽매이지 않고 주/월/년 경계 등을 테스트할 수 있습니다.

SET @clock = '2017-11-17 11:47:47' ;

SELECT DATE(@clock)
     , DATE(@clock) + INTERVAL -7 DAY 
     , @clock + INTERVAL -6 DAY 

특정 사용 사례에 대해 "시작" 및 "종료"에 해당하는 값을 반환하는 식이 있으면 WHERE 절의 범위 비교에서 이러한 식을 사용할 수 있습니다.

(개발자에 따라서는DATE_ADD그리고.DATE_SUB의 기능을 대신하다+ INTERVAL val DAY/HOUR/MINUTE/MONTH/YEAR구문을 사용합니다.

MySQL은 DATE, DATETIME 및 TIMESTAMP 데이터 타입을 사용하기 위한 편리한 기능을 제공합니다.날짜, LAST_Day,

일부 개발자는 시작과 끝을 다른 코드로 계산하고 SQL 쿼리에 문자열 리터럴을 제공하여 데이터베이스에 제출된 쿼리가 다음과 같이 되도록 합니다.

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

그리고 그 접근법도 효과가 있습니다.(CAST, CONVERT 또는 + INTERVAL 트릭을 사용하여 이러한 문자열 리터럴을 DATETIME에 명시적으로 캐스트하는 것이 좋습니다.

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

위의 모든 것은 적절한 DATEY, DATETIME 및/또는 TIMESTAMP 데이터 타입으로 "날짜"를 저장하고 다양한 형식의 문자열로 저장하지 않는 것을 전제로 하고 있습니다.'dd/mm/yyyy',m/d/yyyy, julian dates, 또는 산발적으로 비문자의 형식으로, 또는 에폭의 개시로부터 초수만큼, 이 대답은 훨씬 더 길어질 필요가 있습니다.

INSER JOIN을 사용하고 있기 때문에 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;

언급URL : https://stackoverflow.com/questions/24272335/mysql-select-last-7-days

반응형