タイムスタンプ付きのメッセージを保存するためのデータベースとしてMySQLを使用しています。過去n平日のメッセージを返すクエリを作成することは可能ですか?
つまり、nが4で、今日が火曜日の場合、今週の月曜日、先週の金曜日、先週の木曜日、先週の水曜日からのメッセージが必要です。
mysqlを使用してこれを直接実行する場合は、少し複雑になります。Vatevが推奨しているように、事前に日付スター日付を計算する必要がありますが、本当にこれを実行したい場合は、おそらく次の関数が必要になります。
まず第一に、あなたが何週間戻るべきかを数える必要があります、それは簡単です...あなたにとってone week = 5 days
、それは意味します
weeks = FLOOR(days / 5)
私たちは何週間も世話をしてきたので、残りの部分と一緒に作業する必要があります。
rest = days MOD 5
現在、週末が発生したかどうかという2つのケースがあります。週末がなかった場合は、良いことです。スキップするには2日追加する必要があります。週末が発生した場合(WEEKDAY(now) - rest) < 0
rest = IF( (WEEKDAY(now) - rest) < 0, rest + 2, rest)
そして今、私たちはそれを1つのパーに構築することができます(あなたが持っていて事前に計算されている{days}
と仮定しましょう):{rest}
WHERE date >= ADD_DATE(
ADD_DATE (
{now},
INTERVAL -IF( (WEEKDAY({now}) - {rest}) < 0, {rest} + 2, {rest}) DAYS,
),
INTERVAL -FLOOR({days} / 5) WEEKS
)
私が思いつくことができる最善の方法は、選択した言語で開始日(クエリの{start_date})を計算してから、次のようなものを実行することです。
SELECT some_things
FROM your_table
WHERE
WEEKDAY(time_column) < 5
AND time_column >= {start_date}
ORDER BY time_column DESC
ストアド関数を作成して、「x週間前の日付」を計算し、それを{start_date}に使用することもできます。
このようなことを試しましたか?
SELECT columns
FROM table
WHERE datediff(column_with_timestamp,NOW()) > n
Nは上記で定義したとおりですが、探している日数です。
COL >= date_sub( NOW(), interval 1 week) and
weekday( COL ) < 5