0

タイムスタンプ付きのメッセージを保存するためのデータベースとしてMySQLを使用しています。過去n平日のメッセージを返すクエリを作成することは可能ですか?

つまり、nが4で、今日が火曜日の場合、今週の月曜日、先週の金曜日、先週の木曜日、先週の水曜日からのメッセージが必要です。

4

4 に答える 4

2

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
)
于 2012-07-27T17:37:48.257 に答える
1

私が思いつくことができる最善の方法は、選択した言語で開始日(クエリの{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}に使用することもできます。

于 2012-07-27T17:21:50.860 に答える
0

このようなことを試しましたか?

SELECT columns 
FROM table
WHERE datediff(column_with_timestamp,NOW()) > n

Nは上記で定義したとおりですが、探している日数です。

于 2012-07-27T17:19:37.803 に答える
0
COL >= date_sub( NOW(), interval 1 week) and
weekday( COL ) < 5
  • date_subは、先週作成された行を検索します
  • 平日は日曜日または土曜日を除外します
于 2012-07-27T17:25:58.390 に答える