우리는 데이터베이스로 MySQL을 사용하여 타임 스탬프가있는 메시지를 저장합니다. 지난 주 평일의 메시지를 반환하는 쿼리를 만들 수 있습니까?지난 n 평일 sql 어디에서 clausel
e.e. n이 4이고 오늘이 화요일이면 월요일, 지난 주 금요일, 지난 주 목요일 및 지난 주 수요일의 메시지를 원합니다.
우리는 데이터베이스로 MySQL을 사용하여 타임 스탬프가있는 메시지를 저장합니다. 지난 주 평일의 메시지를 반환하는 쿼리를 만들 수 있습니까?지난 n 평일 sql 어디에서 clausel
e.e. n이 4이고 오늘이 화요일이면 월요일, 지난 주 금요일, 지난 주 목요일 및 지난 주 수요일의 메시지를 원합니다.
을 제외하는 것입니다 지난 주에 생성 된 열을 추구하는 것입니다. C int/int
그냥 할 것, INTERVAL -N WEEKS
FLOOR
으로,
ADD_DATE
: Vatev은 사전에 날짜 별 날짜를 계산해야하지만, 당신이 정말로 이렇게 할 경우, 당신은 아마 다음과 같은 기능이 필요합니다 권장 잘MOD
, a % b
:WEEKDAY
F 당신은 당신이 돌아 가야한다 얼마나 많은 주 계산해야 필요한 모든의 IRST, 그것은 우리가 주 처리를 촬영했습니다
weeks = FLOOR(days/5)
즉, 당신 one week = 5 days
들어 ... 쉬운, 그래서 우리는 지금 작업을해야합니다 나머지 :
rest = days MOD 5
이제 우리는 두 개의 사례를 가지고는, 주말에 발생 또는 아니, 없었다하는 경우에 주말은 좋다. 스킵하기 위해 2 일을 추가해야합니다. 주말이 경우 (WEEKDAY(now) - rest) < 0
rest = IF((WEEKDAY(now) - rest) < 0, rest + 2, rest)
발생 그리고 지금 우리는 (의 당신이 {days}
및 {rest}
미리 계산되어 있다고 가정하자) 하나 개 파에 구축 할 수없는 주말을 포함,
WHERE date >= ADD_DATE(
ADD_DATE (
{now},
INTERVAL -IF((WEEKDAY({now}) - {rest}) < 0, {rest} + 2, {rest}) DAYS,
),
INTERVAL -FLOOR({days}/5) WEEKS
)
다음과 같이 해 보셨습니까?
SELECT columns
FROM table
WHERE datediff(column_with_timestamp,NOW()) > n
여기서 N은 찾고있는 일 수입니다.
는 는주 일. – Vyktor
내가 선택한 언어로 시작 일자 (쿼리의 {시작일을})를 계산 한 다음이 같은 것을 실행 가지고 올 수있는 최선 :
SELECT some_things
FROM your_table
WHERE
WEEKDAY(time_column) < 5
AND time_column >= {start_date}
ORDER BY time_column DESC
또한 저장 할 수 있습니다 함수를 사용하여 'x 일 전 일'을 계산하고 {start_date}에 사용합니다.
아주 좋은 제안, 고마워. – Thomas
COL >= date_sub(NOW(), interval 1 week) and
weekday(COL) < 5
자세한 설명을 부탁드립니다. Vatev가 지적했듯이, db에서 약간의 스트레스를 가하기 위해 응용 프로그램의 시작일을 계산할 것입니다. – Thomas
DB의 스트레스는 무시해도 좋을지 모르지만,보다 정교한 언어로하면 스트레스가 적어 질 것입니다. P – Vatev
@ 토마스 내가 쓴대로 다른 언어로 재사용 할 수 있습니다. , 특히 PHP는 ([strtotime'] (http://php.net/manual/en/function.strtotime.php)에서) 간격을 허용하고 논리는 동일합니다. 작은 리소스를 절약하기 위해'timestamp() - weeks * 7days * 24hour * 3600seconds '를 수행 할 수도 있습니다. – Vyktor