0

DBからレコードをプルするために使用している次のクエリがあります。

SELECT dateAdded, claimedDate, TIMESTAMPDIFF(SECOND, dateAdded, claimedDate) AS output FROM leads 
WHERE HOUR(dateAdded) >= '9' 
AND HOUR(dateAdded) < '18' 
AND DAYOFWEEK(dateAdded) != 7 
AND DAYOFWEEK(dateAdded) != 1

現状では、現在、タイムスタンプが月曜日から金曜日の午前9時から午後5時までのレコードのみを選択しています。また、元日、記念日、独立記念日、労働者の日、感謝祭、クリスマスの主要な祝日を除外できるようにする必要があります。

私はそれらの休日を常に除外する必要があります。たとえば、クエリでは、年に関係なく、11月の第4木曜日(感謝祭)に発生するすべてのレコードを除外する必要があります。

これは必ずしもMySQLのみのソリューションを必要としません。PHP / MySQLのハイブリッドソリューションを実行する方が簡単な場合は、これもうまく機能します。助けてくれてありがとう。

4

2 に答える 2

4

「休日」の基準を満たす日付のテーブルが必要です。次に、JOINそのテーブルに移動します。

これが例です

それ以外の場合は、単にそれらを除外する必要があります...

... WHERE dateAdded NOT IN ('2012-07-04', ...)

アップデート

このソリューションでは、を使用しJOINて休日を省略します。

于 2012-11-26T20:04:55.277 に答える
0

関数is_holidayを作成してから、selectステートメントに追加することができます。そのように。

CREATE DEFINER=`root`@`localhost` FUNCTION `is_holiday`(nDate Date) RETURNS tinyint(1)
BEGIN
declare isholiday boolean;
set isholiday = false;

if month(nDate)=1 and day(nDate)=1 then set isholiday = true;
elseif month(nDate)=7 and day(nDate)=4 then set isholiday = true;
elseif month(nDate)=12 and day(nDate)=25 then set isholiday = true;
elseif month(nDate)=9 and day(nDate) between 1 and 7 and weekday(nDate) = 0 then set isholiday = true;
elseif month(nDate)=11 and day(nDate) between 22 and 28 and weekday(nDate) = 3 then set isholiday = true;
end if;

RETURN isholiday;
end

コードに追加...

and not is_holiday(dateAdded)
于 2019-06-10T15:59:04.560 に答える